2

私は、既存の WPF フォームにコンボボックスを追加する任務を負っています。私は WPF を使用したことがなく、特に ObservableCollection プロパティのバインドと使用に関してはかなり迷っています。すべての例は、私がそうするように言われた方法とはまったく異なります。

私はもともとコンボボックスを次のように設定していました:

<ComboBox Name="GroupComboBox" Width="132" Height="22" Grid.Column="0" Grid.Row="3" Margin="0,30" VerticalAlignment="Top" >         
    <ComboBoxItem Content="Data Warehouse"></ComboBoxItem>
    <ComboBoxItem Content="KPI"></ComboBoxItem>
    <ComboBoxItem Content="Failures"></ComboBoxItem>
    <ComboBoxItem Content="All Groups"></ComboBoxItem>            
</ComboBox>

これはうまくいきました。これは、すべての ComboBoxItem Contents を削除し、コンボ ボックスを ObservableCollectionGroups と ObservableCollectionSelectedGroups にバインドする必要があると言われたときです。これを行うには、これを ViewModel クラスに追加するだけで済みます。

 public ObservableCollection<string> Groups { get; set; }      

 public ObservableCollection<string> SelectedGroups { get; set; }

わかりましたので、上記を次のようにビュー モデル クラスに追加しました。

public class ClioViewModel : INotifyPropertyChanged
{
    public ObservableCollection<string> Groups { get; set; }      

    public ObservableCollection<string> SelectedGroups { get; set; }
}

(このクラスにはすでに他にもたくさんのものがありますが、時間とスペースの関係で投稿しませんでした。必要に応じて、リクエストがあれば喜んで追加します)

次に、xaml を次のように変更しました。

<ComboBox Name="GroupComboBox" ItemsSource="{Binding Groups}" SelectedItem=" Binding  SelectedGroups, Mode=TwoWay}" Width="132" Height="22" Grid.Column="0" Grid.Row="3" Margin="0,30" VerticalAlignment="Top" >                         
</ComboBox>    

うまくいきませんでした。もちろん、うまくいきませんでした!コンボボックスの中に入れたいアイテムが一つもありません! 問題は、それらがコンボボックス内に属しておらず、グループ/選択されたグループのプロパティに配置されていない場合、一体どこに行くのでしょうか? 私が見た多数のコンボボックス バインディングの例のどれも、私が指示されているものとはまったく似ていません。

誰かが私が欠けているものについて教えてくれたら、本当に感謝しています。

4

2 に答える 2

3

Groupコレクションのどこかに値を追加する必要があります(初期化子またはクラスコンストラクターで):

Groups.Add("Data Warehouse");
Groups.Add("Data KPI");
Groups.Add("Data Failures");
Groups.Add("Data All Groups");

率直に言って、この場合、これを行う意味はわかりませんが、コードの残りの部分と関係がある可能性があります。

于 2012-07-19T13:12:12.887 に答える
2

デビッドが言ったように-あなたのグループコレクションを埋めてください。2番目:DataContextをビューモデルのインスタンスに設定していることを確認してください。itemssourceのバインディングは正しいです。SelectedItemのバインドが正しくありません。文字列プロパティにバインドするだけです。Mode = TwoWayは、ビューモデルからも選択を行う必要がある場合に必要です。

 public string MySelectedItem
 {
   get{return this._myselecteditem;}
   set{this._myselecteditem=value; OnPropertyChanged("MySelectedItem");}
 }

xaml

  <ComboBox ItemsSource="{Binding Groups}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay}"/>
于 2012-07-19T13:25:52.493 に答える