我正在开发一个使用MVVM模式的WPF应用程序。在我的视图中,有一个包含不同列的网格视图。其中一列是一个ListBox。现在的问题是,对于这个ListBox列,SelectedItem的获取工作正常,但设置操作却无效。
以下是我的视图代码:
<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中,我有一个主ViewModel类,其中包含一个项目列表。项目类包含名称、操作列表和选定的操作。
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; }
}
}
现在Items列表中的SelectedItem可以正常工作。但是Actions类中SelectedItem并没有完全起作用。我在SelectedAction的getter和setter中插入了断点,get断点触发了。但是如果我从UI中选择一个操作,那么设置SelectedAction的断点就不会被触发。
问题出在哪里?
当我选择Archive Project或Restore Project时,SelectedAction的setter没有被调用。
注意:我已经删除了不必要的信息,比如在列表中加载数据,实现INotifyOfPropertyChanged等。