我有一個Window(MainWindow.xaml),它有一個ViewModel(MainWindowViewModel.cs)。我也有一個叫做MyUserControl.xaml的UserControl,它也有一個對應的ViewModel(MyUserControlViewModel.cs)。WPF MVVM - 在UserControls上綁定到容器ViewModel的屬性
我已插入該用戶控件的兩個實例到主窗口:
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyProject"
Title="My Window">
<Grid>
<local:MyUserControl Visibility="{Binding Path=MyUserControl1Visibility, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<local:MyUserControl Visibility="{Binding Path=MyUserControl2Visibility, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Window>
在主窗口的代碼隱藏我設置窗口的DataContext到視圖模型的一個實例:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
MainWindowViewModel具有MyUserControl實例綁定的可見性屬性。他們都看起來像這樣:
private Visibility _myUserControl1Visibility = Visibility.Collapsed;
public Visibility MyUserControl1Visibility
{
get
{
return _myUserControl1Visibility;
}
private set
{
if (value != _myUserControl1Visibility)
{
_myUserControl1Visibility = value;
OnPropertyChanged("MyUserControl1Visibility");
}
}
}
此外,主窗口和MainWindowViewModel有按鈕和命令,使用戶能夠在兩個實例的MyUserControl之間切換。也就是說,任何時候都只顯示其中的一個。
這工作得很好......直到UserControls有自己的ViewModels。現在,運行時嘗試在UserControl的ViewModels上找到綁定的VisibilityProperties(MyUserControl1Visibility ...),而不是MainWindow的ViewModel。
如何使這些綁定轉到MainWindowViewModel而不是UserControl實例的相應ViewModel?
謝謝Meleak! :) – haagel 2010-12-09 20:39:56