私はWPFアプリケーションに取り組んでおり、MVVMに従っています。私の見解では、異なる列を含むグリッド ビューがあります。これらの列の 1 つは ListBox です。ここでの問題は、ListBox 列の場合、SelectedItem の get は正常に機能しますが、set は機能しないということです。
ここに私のビューコードがあります
<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" />
<DataGridTemplateColumn Header="Actions">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox DisplayMemberPath="Name" ItemsSource="{Binding Actions}" SelectedItem="{Binding SelectedAction}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
私のViewModelには、アイテムのリストを含むMain ViewModelクラスがあります。Item クラスには、名前、アクションのリスト、および選択されたアクションが含まれます。
public class MyViewModel : INotifyOfPropertyChanged
{
private ObservableCollection<Item> _items;
public ObservableCollection<Item> Items
{
get { return _items?? (_items= new ObservableCollection<Item>); }
}
private Item _selectedItem;
public Item SelectedItem
{
get { return _selectedItem; }
set { _selectedItem= value; }
}
}
public class Item : INotifyOfPropertyChanged
{
public string Name;
private ObservableCollection<string> _actions;
public ObservableCollection<string> Actions
{
get { return _actions?? (_actions= new ObservableCollection<string>); }
}
private string _selectedAction;
public string SelectedAction
{
get { return _selectedAction; }
set { _selectedAction = value; }
}
}
アイテム リストの SelectedItem が正常に機能するようになりました。ただし、Actions の Item クラス内の SelectedItem は完全には機能しません。SelectedAction の getter と setter にブレークポイントを挿入しました。ブレークポイント ヒットを取得します。しかし、UI からアクションを選択すると、SelectedAction のブレークポイントを設定してもヒットしません。
どうしたの。
Archive Project または Restore Project を選択すると、SelectedAction のセッターが呼び出されません。
注:リストへのデータのロード、INotifyOfPropertyChanged の実装などの不要な情報を削除しました。