窗口加载时WPF级联组合框不绑定
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了窗口加载时WPF级联组合框不绑定相关的知识,希望对你有一定的参考价值。
我正在使用WPF和MVVM,并且有一个支持票证窗口,其中包含级联ComboBox
es,如下所示。第一个是视图模型上的ObservableCollection<ProblemCode>
。 ProblemCode
对象具有与其子代码相关的自引用属性,最低可达四个代码。 ComboBox
es的XAML看起来像这样(简化,为简洁起见只显示了三个)......
<ComboBox ItemsSource="{Binding ElementName=Root, Path=DataContext.ProblemCodes, Mode=TwoWay}"
Name="ProblemCodeLevel1"
DisplayMemberPath="Description"
SelectedValuePath="ID"
SelectedValue="{Binding ProblemCode1ID, Mode=TwoWay}" />
<ComboBox ItemsSource="{Binding ElementName=ProblemCodeLevel1, Path=SelectedItem.Children}"
Name="ProblemCodeLevel2"
DisplayMemberPath="Description"
SelectedValuePath="ID"
SelectedValue="{Binding ProblemCode2ID, Mode=TwoWay}" />
<ComboBox ItemsSource="{Binding ElementName=ProblemCodeLevel2, Path=SelectedItem.Children}"
Name="ProblemCodeLevel3"
DisplayMemberPath="Description"
SelectedValuePath="ID"
SelectedValue="{Binding ProblemCode3ID, Mode=TwoWay}" />
当我为新票证加载窗口时,第一个ComboBox
被正确填充。选择项目会填充第二个项目,依此类推。保存票证时,数据已正确保存。
但是,当我保存票证并重新打开窗口时,只有第一个ComboBox
具有所选项目集。其他ComboBox
es没有任何设置。
我想第一个ComboBox
被设置为数据绑定发生时可用的数据。在那个阶段,由于第一个ComboBox
是数据绑定,第二个没有任何项目,所以不受约束。第三个相同,依此类推。
任何有关如何使绑定工作的建议?我可能通过添加代码来捕获各种事件来破解这一点,但除了打破MVVM模式之外,听起来没有一种情况会导致错综复杂和错误。
一般来说,您不应该直接绑定到元素,您应该绑定到视图模型中的属性。这样你知道属性通知正在正确完成,你可以添加断点等来确认绑定都是正常的。在这种特殊情况下,您需要将SelectedItem="{Binding Level1Item}"
之类的内容添加到第一个ComboBox中,然后在视图模型中为其添加属性:
public ProblemCode _Level1Item;
public ProblemCode Level1Item
{
get { return this._Level1Item; }
set
{
if (this._Level1Item != value)
{
this._Level1Item = value;
RaisePropertyChanged(() => this.Level1Item);
}
}
}
然后你的第二个ComboBox绑定到这个属性而不是Element.SelectedItem.Children:
<ComboBox ItemsSource="{Binding Level1Item.Children}"
...etc...
重复第二个和第三个ComboBoxes,你将拥有你所追求的功能。
以上是关于窗口加载时WPF级联组合框不绑定的主要内容,如果未能解决你的问题,请参考以下文章