我有一个Window(MainWindow.xaml),它有一个ViewModel(MainWindowViewModel.cs).我还有一个名为MyUserControl.xaml的UserControl,它也有一个相应的ViewModel(MyUserControlViewModel.cs).
我已将UserControl的两个实例插入MainWindow:
<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>
Run Code Online (Sandbox Code Playgroud)
在MainWindow的CodeBehind中,我将Window的DataContext设置为ViewModel的一个实例:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
Run Code Online (Sandbox Code Playgroud)
MainWindowViewModel具有MyUserControl实例绑定的Visibility属性.它们看起来都是这样的:
private Visibility _myUserControl1Visibility = Visibility.Collapsed;
public Visibility MyUserControl1Visibility
{
get
{
return _myUserControl1Visibility;
}
private set
{
if (value != _myUserControl1Visibility)
{
_myUserControl1Visibility = value;
OnPropertyChanged("MyUserControl1Visibility");
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,MainWindow和MainWindowViewModel具有按钮和命令,使用户能够在两个MyUserControl实例之间切换.也就是说,它们中只有一个随时出现.
这工作正常......直到UserControls获得自己的ViewModels.现在,运行时尝试在UserControls的ViewModel上找到绑定的VisibilityProperties(MyUserControl1Visibility ...),而不是MainWindow的ViewModel.
如何将这些绑定转到MainWindowViewModel而不是UserControl实例的相应ViewModel?
Fre*_*lad 11
MyUserControls从MainWindow继承了DataContext,这就是它开始工作的原因.当MyUserControl1获得自己的ViewModel时,它将是它的DataContext.也许你很清楚:)要在绑定中使用MainWindow的DataContext,你可以使用RelativeSource或命名Window并使用ElementName
<local:MyUserControl Visibility="{Binding ElementName=mainWindow,
Path=DataContext.MyUserControl1Visibility,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16440 次 |
| 最近记录: |