WPF - 绑定到同一控件实例的两个用户控件的内容
WPF - Content of two user controls bound to same instance of control
我有一个 wpf/c# 申请。;
我有一个列表框,根据所选项目显示特定视图。
我有一个视图显示所有和不同的值。
视图如下所示:
<UserControl.Content>
<Binding Path="DisplayControl" UpdateSourceTrigger="PropertyChanged"/>
</UserControl.Content>
DisplayControl 是列表框项的视图模型中的一个 UserControl(我知道它不是最好的,但目前不能更改)。
它在所有列表框项目之间共享。
最后一个列表框项目(调用 DisplayControl 集 属性 的最后一个)是在单击时显示视图的项目 - 所有其他项目都显示为空白。
问题是什么?它们的绑定方式相同,为什么最后一个只显示控件,我该如何解决?
WPF 中的一个控件一次只能有一个 parent。事实上,它一次只能在一个地方。您正在快速连续给 DisplayControl
两个不同的 parent。第二个是它结束的地方。
您实际上想完成什么?在程序规范术语中,不是 "I'm trying to pound a nail with a live dog because the birthday cake didn't work as a shovel"。您是否希望 DisplayControl
的 content 同时显示在两个不同的地方?这是可行的。
无论如何,首要任务是不要在您的视图模型中存储任何 UserControl。这可以而且必须改变。您要在 UserControl 中放置某种内容,对吗?这就是它的用途,对吧?因此,在您的视图模型中包含 content,并使用模板将其显示在视图中的一个或多个 UserControl 中。
您在尝试让这个水管工的噩梦开始工作时浪费的时间越多,情况就会变得越糟。 Sunk Cost Fallacy 不是你的朋友。但对于大多数人来说,只有一种方法可以了解它。
我认为你应该尝试这样的事情:
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 是对的。
我有一个 wpf/c# 申请。; 我有一个列表框,根据所选项目显示特定视图。 我有一个视图显示所有和不同的值。 视图如下所示:
<UserControl.Content>
<Binding Path="DisplayControl" UpdateSourceTrigger="PropertyChanged"/>
</UserControl.Content>
DisplayControl 是列表框项的视图模型中的一个 UserControl(我知道它不是最好的,但目前不能更改)。 它在所有列表框项目之间共享。 最后一个列表框项目(调用 DisplayControl 集 属性 的最后一个)是在单击时显示视图的项目 - 所有其他项目都显示为空白。
问题是什么?它们的绑定方式相同,为什么最后一个只显示控件,我该如何解决?
WPF 中的一个控件一次只能有一个 parent。事实上,它一次只能在一个地方。您正在快速连续给 DisplayControl
两个不同的 parent。第二个是它结束的地方。
您实际上想完成什么?在程序规范术语中,不是 "I'm trying to pound a nail with a live dog because the birthday cake didn't work as a shovel"。您是否希望 DisplayControl
的 content 同时显示在两个不同的地方?这是可行的。
无论如何,首要任务是不要在您的视图模型中存储任何 UserControl。这可以而且必须改变。您要在 UserControl 中放置某种内容,对吗?这就是它的用途,对吧?因此,在您的视图模型中包含 content,并使用模板将其显示在视图中的一个或多个 UserControl 中。
您在尝试让这个水管工的噩梦开始工作时浪费的时间越多,情况就会变得越糟。 Sunk Cost Fallacy 不是你的朋友。但对于大多数人来说,只有一种方法可以了解它。
我认为你应该尝试这样的事情:
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 是对的。