我在使用MVVM的UWP中遇到了问题,其中Combobox
与ItemsSource
绑定到我的ViewModel中的项目集合,而且在我的VM中也是来自该集合的项目那SelectedItem
是绑定的。Uwp Combobox绑定源代码更改
我需要随意在我的视图模型同时更改项目源和所选择的项目。问题是,如果在任何时间点ItemsSource
中不存在SelectedItem
,则SelectedItem
的绑定似乎永久中断。
例子: 比方说,我有一个绑定到我的虚拟机一个Comobox:
<ComoboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
在我的ViewModel
现在,我有:
public List<string> Items { get; set; } // Pretend these properties call on OnPropertyChanged
public string SelectedItem { get; set; }
public void Initialize() {
Items = new List<string> { "A", "B", "C", "D" };
SelectedItem = "B";
}
public void ChangeList() {
// This breaks the binding that the Combobox has with SelectedItem
Items = new List<string> { "E", "F", "G", "H" };
// This does nothing on the XAML side as the binding is already broken by this poing
SelectedItem = "H";
}
当初始化时,应用程序会显示“ B“在选定的组合框中。如果在代码中说,我将它更改为“A”,这也将反映视图中的更改。但是,当我拨打ChangeList()
时,组合框将被设置为空白,并忽略我在代码后面做出的任何更改。
不幸的是,设置SelectedItem
为null之前,我更新源列表不解决我的问题。
我将如何去改变虚拟机中的源和选定项目?
我确实认为它应该可以这样工作。我观察到,当我将绑定模式设置为“TwoWay”时,SelectedItem被设置为“null”,但在此之后绑定似乎仍然被破坏。更改数据模型中的项目不再触发组合框上的get,并且不会选择任何内容。 –