我在viewModel中的comboBox逻辑遇到了一些麻烦。 viewModel填充comboBox,用户可以选择项目。
选择一个项目后, View 中会出现一些可编辑的信息,它们可以进行更改。现在,我想提示用户保存是否进行了更改但未保存,并且他们正尝试在下拉列表中选择其他项(“保存?”是/否/取消messageBox)。
现在,我需要记住以前选择的项目,如果用户选择“取消”,则可以通过重置选择的项目自己来处理。由于comboBox没有PreviewSelectionChanged事件,所以这是我想到处理这种情况的唯一方法。它可以工作,但是有多个comboBoxes等,因此有点困惑。
我是否缺少任何东西,或者这仅仅是需要做的事情吗?
最佳答案
将可编辑项目复制为项目副本而不是实际项目该怎么办?
因此,您的ViewModel将包含
ObservableCollection<MyModel> ComboBoxItems;
int SelectedComboBoxIndex;
MyModel EditingItem;
每当
PropertyChange
上发生SelectedComboBoxIndex
事件时,您都会检查EditingItem
是否为null。如果是null
,则表示您可以安全切换并设置EditingItem = ComboBoxItem[SelectedComboBoxIndex]).Copy();
如果
EditingItem
不为null,则抛出提示,询问用户是否要保存更改或取消更改。当用户单击“保存”时,它将接受
EditingItem
并将更改应用于数据存储并更新ComboBoxItems
列表中的项目。如果他们单击取消,则
EditingItem
会被简单丢弃。关于wpf - WPF,MVVM和组合框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6527248/