假设我有四个组合框(我们称之为 cbA1、cbA2、cbB1、cbB2),cbA1 和 cbB1 绑定到相同的属性,而 cbA2 和 cbB2 绑定到我的视图模型中的不同属性。在我切换到 MVVM 之前,我有一些代码隐藏,以确保相同的值在 cbA1 和 cbB1 中不同。他们使用枚举作为 itemssource。
您将不得不忽略为什么我现在有这么多组合框显示数据的原因。我只是偶然偶然发现了这一点。
这是它们在 XAML 中的构造方式:
<ComboBox
x:Name"cbA1"
DisplayMemberPath="Description"
SelectedValuePath="Value"
SelectedValue="{Binding Window1Page}"
ItemsSource="{Binding Source={local:Enumeration {x:Type Enum:eDisplayPages}}}"/>
<ComboBox
x:Name"cbA2"
DisplayMemberPath="Description"
SelectedValuePath="Value"
SelectedValue="{Binding Window2Page}"
ItemsSource="{Binding Source={local:Enumeration {x:Type Enum:eDisplayPages}}}"/>
因此,当我运行应用程序时,#1 组合框显示来自 Window1Page 的数据,而#2 组合框显示来自 Window2Page 的数据。我的旧代码隐藏检查以确保 #1 组合框中的内容不能出现在 #2 组合框中。这是一种享受。现在我正在迁移到 MVVM 模型,我已经将代码移动到属性本身进行检查。这是属性之一:
public eDisplayPages Window1Page
{
get { return _window1page; }
set
{
if (_window1page == value)
return;
if ((value.Equals(_window2page)) && (value != eDisplayPages.NoDashPage))
{
//Can't have them both selecting the same page
value = eDisplayPages.NoDashPage;
}
SetProperty(ref _window1page, value);
}
}
虽然这里不是真正相关的是帮助您可视化问题的枚举:
public enum eDisplayPages
{
[Description("NO Layout")]
NoDashPage = 0,
[Description("Main Layout")]
MainDashPage,
[Description("Timing Layout")]
TimingOnlyDashPage
}
所以我看到的问题是,当我将 cbA1 更改为与 cbA2 相同的值时,属性代码会运行并将值更改为默认的“NoDashPage”,但它只会更新我没有进行更改的组合框中,在这种情况下为 cbB1。
用于更改我关注的组合框以及其他组合框的旧代码隐藏方法。唯一的区别是我曾经将焦点组合框的 SelectedValue 设置为新值,这确实更新了另一个组合框。
我不明白为什么它不更改我在其中进行初始选择的组合框。如果我进入调试器,则 Window1Page 的值是正确的。
虽然我最终会删除重复的组合框,但我关注的组合框没有更新是最大的问题。