加载窗口时WPF级联组合框未绑定
我正在使用WPF和MVVM,并且有一个支持票证窗口,其中包含如下级联组合框。第一个绑定到视图模型上的ObservableCollection。ProblemCode对象对其子代码具有自引用属性,其级别为四个代码。组合框的XAML看起来是这样简化的,为了简洁起见,只显示了三个加载窗口时WPF级联组合框未绑定,wpf,mvvm,combobox,Wpf,Mvvm,Combobox,我正在使用WPF和MVVM,并且有一个支持票证窗口,其中包含如下级联组合框。第一个绑定到视图模型上的ObservableCollection。ProblemCode对象对其子代码具有自引用属性,其级别为四个代码。组合框的XAML看起来是这样简化的,为了简洁起见,只显示了三个 <ComboBox ItemsSource="{Binding ElementName=Root, Path=DataContext.ProblemCodes, Mode=TwoWay}" Name=
<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}" />
当我加载一个新票证窗口时,第一个组合框被正确填充。选择一个项目将填充第二个项目,以此类推。当我保存票据时,数据已正确保存
但是,当我保存票据并重新打开窗口时,只有第一个组合框设置了所选项目。其他组合框没有任何设置
我猜第一个组合框被设置为在数据绑定发生时数据可用。在那个阶段,由于第一个组合框是数据绑定的,第二个组合框还没有任何项目,所以没有绑定。第三个也一样,以此类推
有人对如何使装订工作有什么建议吗?我可能可以通过添加代码来捕获各种事件来解决这一问题,但除了打破MVVM模式外,似乎没有任何一种情况会以复杂和错误告终。一般来说,您不应该直接绑定到元素,应该绑定到视图模型中的属性。这样,您就知道属性通知已正确完成,并且可以添加断点等来确认绑定是否也正常工作。在这种特殊情况下,您需要将SelectedItem={Binding Level1Item}之类的内容添加到第一个组合框中,然后在视图模型中为其添加属性:
public ProblemCode _Level1Item;
public ProblemCode Level1Item
{
get { return this._Level1Item; }
set
{
if (this._Level1Item != value)
{
this._Level1Item = value;
RaisePropertyChanged(() => this.Level1Item);
}
}
}
然后,您的第二个组合框绑定到此属性,而不是Element.SelectedItem.Children:
<ComboBox ItemsSource="{Binding Level1Item.Children}"
...etc...
对第二个和第三个组合框重复上述操作,您将获得所需的功能。您的viewmodel外观如何?很抱歉,回复延迟。这很好,非常感谢。