WPF-MVVM:来自不同项目的UserControl之间的绑定
我有一个项目解决方案如下 开始窗口是位于ProjectStart.View中的MainWindowsStart.xaml,使用Datacontext ProjectStartViewModel.cs进行查看 mainWindowsStart.xaml包括两个用户控件(MyUC1.xaml,MyUC2.xaml),它们位于具有DataContextProject1ViewModel.cs的不同项目(Project1)中 . 属性在MainWindow的InitializeComponent()上正确绑定,但在属性更改时不起作用。 当用户控件包含在位于用户控件的某个项目中的窗口中时,它可以正常工作 这是ViewModel ViewModel中的属性代码WPF-MVVM:来自不同项目的UserControl之间的绑定,wpf,xaml,mvvm,binding,Wpf,Xaml,Mvvm,Binding,我有一个项目解决方案如下 开始窗口是位于ProjectStart.View中的MainWindowsStart.xaml,使用Datacontext ProjectStartViewModel.cs进行查看 mainWindowsStart.xaml包括两个用户控件(MyUC1.xaml,MyUC2.xaml),它们位于具有DataContextProject1ViewModel.cs的不同项目(Project1)中 . 属性在MainWindow的InitializeComponent()上
private int _IndexTabMain;
public int IndexTabMain
{
get { return _IndexTabMain; }
set
{
if (_IndexTabMain != value)
{
_IndexTabMain = value;
this.RaisePropertyChanged("IndexTabMain");
}
}
}
这是绑定在MyUC2.xaml中的属性代码,从MyUC1.xaml中的选择更改中得到通知
<TextBlock Text="{Binding DataContext.IndexTabMain, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}">
提前谢谢你
Manuel如果在父窗口的视图模型中定义了
IndexTabMain
,则应将AncestorType
属性设置为window
:
<TextBlock Text="{Binding DataContext.IndexTabMain, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=Window}}">
一般来说,您不应该显式设置UserControl的DataContext。这样做可以有效地防止从父控件或窗口继承DataContext,这通常会破坏绑定。例如,请参见此处:IndexTabMain属性在哪里定义?您的用户控件应在绑定ViewModel的曲面上公开DependencyProperties。就像文本框具有文本属性一样,用户控件也应该具有绑定到视图模型的Whatever属性的Whatever属性。