我在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/

10-17 00:29