我想做的事情似乎很简单,但出于某种原因,它感觉很笨,所以我觉得我做错了。
我想做的就是有一些下拉菜单,这些下拉菜单会更改设置。它们在更改后会被保存。 有一个下拉列表控制WPF窗口中显示的内容。当此下拉列表更改时,其他下拉列表中的设置将更改为新选择。
我的问题是当我在窗口加载时填写所有下拉列表的值时,它会触发所有下拉列表中的事件选择。
所以我没有在我的每一个事件中进行空检查(这就是我现在所拥有的),而是想要一个更好的解决方案。
这些下拉列表永远不会有值。它们也不是静态的。它们是在运行时从数据源计算的。即使是静态值也会触发事件。 某些下拉列表在下拉列表中控制所有其他值的所有值都具有固定值。这意味着它们是在启动期间的运行时计算的,并且永远不会更改。
我不想在后面的代码中绑定事件。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// This triggers the combobox selectionchanged
// The selection changed event sets the values of other dropdowns
// The event will not succeed because the values in those dropdowns
// are not populated
FillProjectList();
}
答案 0 :(得分:0)
如何停止使用一个下拉菜单来控制其他所选项目,而是让ViewModel(或您的绑定类)控制它。
每个下拉菜单都有它的来源,添加绑定到所选项目(我认为默认情况下应该是双向模式)
<ComboBox ItemsSource="{Binding ViewModel.ProjectsList}"
SelectedItem="{Binding ViewModel.SelectedProject}"/>
<ComboBox ItemsSource="{Binding ViewModel.SettingsList}"
SelectedItem="{Binding ViewModel.SelectedSettings}"/>
<ComboBox ItemsSource="{Binding ViewModel.TheControlingList}"
SelectedItem="{Binding ViewModel.SelectedConrolingItem}"/>
然后当ViewModel的SelectedConrolingItem属性发生更改时,更新/设置属性setter中的其他所选项(SelectedProject等等)