私はWPFとMVVMパターンを使用しています。リストにバインドされているすべてのコンボボックスはうまく動作しますが、フィルタリングのためにCollectionViewSource
を使用するカスケードドロップダウンがあります。セッター(回答を探しているうちに別の人が問題を抱えているのを見た)と同じようにフィルタリングが機能しますが、初期値を設定できません。私はいくつかの方法を試みましたが、どれも選択された項目に影響を与えるようには見えません。CollectionViewSourceにバインドされたComboboxの初期値を設定します。
ビューモデルのCTOR、プロパティセッター(_ticket.SelectedSubstatusをモデルコンストラクタで設定されている):
public TicketViewModel()
{
_ticket = new TicketModel();
SubstatusList = CollectionViewSource.GetDefaultView(GetStatusList());
SubstatusList.Filter = (x) => { return (int)(x as Substatus).IST_MAIN_STATUS == (int)SelectedStatus.IST_STATUS_ID; };
SubstatusList.MoveCurrentTo(_ticket.SelectedSubstatus);
SelectedSubstatus = _ticket.SelectedSubstatus;
Substatus test = (Substatus)SubstatusList.CurrentItem;
}
public Substatus SelectedSubstatus
{
get { return _ticket.SelectedSubstatus; }
set
{
if (value == _ticket.SelectedSubstatus ||value == null)
return;
_ticket.SelectedSubstatus = value;
_ticket.Issue.IS_SUBSTATUS_ID = value.IST_SUBSTATUS_ID;
base.OnPropertyChanged("SelectedSubstatus");
}
}
、ここでコンボボックスのXAMLは
ある<ComboBox HorizontalAlignment="Stretch" Margin="15,0,0,0"
Name="comboBox1" VerticalAlignment="Bottom"
Grid.Column="2" Grid.Row="1" FontSize="12"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Path=SubstatusList}"
SelectedItem="{Binding Path=SelectedSubstatus, Mode=TwoWay}"
DisplayMemberPath="IST_NAME"/>
CollectionViewSource
から現在のアイテムがnull MoveCurrentTo()によって設定された直後、およびテストによってチェックされたときに発生します。私は間違って何をしていますか?
あなたはそれを後に持っています。 'SelectedSubstatus'はnullではなく、ドロップダウンで選択を行うと' SelectedSubstatus'が正しく更新されます。これは意味があると思いますが、 'SubstatusList.MoveCurrentTo(_ticket.SelectedSubstatus);'は 'SubstatusList'でオブジェクトを見つけることができない場合、それを設定しません。 SubstatusListでCurrentItemを設定するにはどうすればよいですか? – Tyrsius
また、サブ状態はEF4オブジェクトです。そのオーバーライドを部分クラスに配置しようとしましたが、 'ID'は有効なプロパティではありません。私はIntellisenseで働いていたものは何も見ませんでした。 – Tyrsius
'SubStatus'クラスの' Equals() 'を上書きして、データが同じ場合はtrueを返します。今、メモリ内の参照が同じであればtrueを返します。 Idプロパティが例でした。 – Rachel