我有一个wpf / c#应用程序。 我有一个列表框,根据所选项目,我显示一定的视图。 我有一个全部视图,显示不同的值。 视图如下所示:
<UserControl.Content>
<Binding Path="DisplayControl" UpdateSourceTrigger="PropertyChanged"/>
</UserControl.Content>
DisplayControl是列表框项目的视图模型中的UserControl(我知道它不是最好的,但现在不能改变)。 它在所有列表框项之间共享。 最后一个列表框项(调用DisplayControl set属性的最后一个)是在单击时显示视图的项 - 所有其他项显示为空白。
有什么问题?它们的绑定方式相同,为什么最后一个只显示控件,我该如何解决?
答案 0 :(得分:4)
WPF中的控件一次只能有一个父控件。事实上,它一次只能在一个地方。你快速连续地给DisplayControl
两个不同的父母。第二个是最终结果。
你在这里完成的目的是什么?在节目规格方面,并非“我正试图用活狗敲打钉子,因为生日蛋糕不像铲子那样”。您希望DisplayControl
的内容一次显示在两个不同的地方吗?这是可行的。
无论如何,第一项业务的顺序是不在Viewmodel中存储任何UserControl。这可以而且必须改变。你在UserControl中放了一些内容,对吧?这就是它的用途,对吧?所以在viewmodel中有内容,并使用模板在视图中的一个或多个UserControl中显示它。
你浪费的时间越多,试图让这个水管工的噩梦发挥作用,它就越糟糕。 Sunk Cost Fallacy不是你的朋友。但对大多数人来说,只有一种方法可以学习。
答案 1 :(得分:1)
我认为你应该尝试这样的事情:
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 }
}
}
在你的view.xaml
中<listbox normal binding to List + selectedItem binding>
<ContentControl Binding={SelectedItem.UserControl} >
这只是伪代码,试着坚持你现有的代码,如下所示:)
顺便说一下:@Ed Plunkett是对的。