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

时间:2016-06-01 14:56:49

标签: c# wpf listboxitem

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

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

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

有什么问题?它们的绑定方式相同,为什么最后一个只显示控件,我该如何解决?

2 个答案:

答案 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是对的。