WPF-绑定到同一控件实例的两个用户控件的内容



我有一个wpf/c#应用程序。;我有一个列表框,根据所选项目,我显示某个视图。我有一个视图显示所有和不同的值。视图如下:

<UserControl.Content>
<Binding Path="DisplayControl" UpdateSourceTrigger="PropertyChanged"/>
</UserControl.Content>

DisplayControl是列表框项目的视图模型中的一个UserControl(我知道它不是最好的,但现在不能改变)。它在所有列表框项目之间共享。最后一个列表框项(调用DisplayControl集属性的最后一个)是在单击视图时显示视图的项,其他所有项都显示为空。

问题出在哪里?它们以相同的方式绑定,为什么最后一个只显示控件,我该如何修复?

WPF中的控件一次只能有一个父级。事实上,它一次只能在一个地方。你正在给DisplayControl两个不同的父母快速连续。第二个是它的终点。

在这里,您实际上想完成什么?用程序规范的术语来说,不是"我试图用活狗敲钉子,因为生日蛋糕不能起铲子的作用"。是否希望DisplayControl内容同时显示在两个不同的位置?这是可行的。

无论如何,首要任务是不要在视图模型中存储任何UserControls。这种情况可以而且必须改变。你在UserControl中放入了某种内容,对吧?这就是它的作用,对吧?因此,在视图模型中具有内容,并使用模板将其显示在视图中的一个或多个UserControls中。

你越是浪费时间让这个水管工的噩梦开始工作,情况就会越糟。沉没成本谬误不是你的朋友。但对大多数人来说,只有一种方法可以学会这一点。

我认为你应该试试这样的东西:

ViewModel.cs

public TypeModel
{
private string _label;
public string Label{ MVVM stuff}
private UserControl _userControl;
UserControl UserControl { MVVM stuff }
}
public class toto
{
private ObservableCollection<TypeModel> _list;
public ObservableCollection<TypeModel> List
{
get{return this._list;}
set { set value and notifyPropertyChanged }
}
private TypeModel _selectedItem;
public TypeModel SelectedItem
{
get{ return this._selectedItem;}
set { set value and NotifyPropertyChanged }
}
}

在您的视图中.xaml

<listbox normal binding to List + selectedItem binding>
<ContentControl Binding={SelectedItem.UserControl} >

这只是一个伪代码,试着像这样坚持你现有的代码:)

顺便说一句:Ed Plunkett是对的。

最新更新