gpt4 book ai didi

WPF MVVM - 将 UserControls 上的属性绑定(bind)到容器的 ViewModel

转载 作者:行者123 更新时间:2023-12-04 10:57:50 25 4
gpt4 key购买 nike

我有一个具有 ViewModel (MainWindowViewModel.cs) 的窗口 (MainWindow.xaml)。我还有一个名为 MyUserControl.xaml 的 UserControl,它也有一个相应的 ViewModel (MyUserControlViewModel.cs)。

我在主窗口中插入了两个 UserControl 实例:

<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>

在 MainWindow 的 CodeBehind 中,我将 Window 的 DataContext 设置为 ViewModel 的一个实例:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}

MainWindowViewModel 具有 MyUserControl 实例绑定(bind)到的可见性属性。它们看起来像这样:
private Visibility _myUserControl1Visibility = Visibility.Collapsed;
public Visibility MyUserControl1Visibility
{
get
{
return _myUserControl1Visibility;
}
private set
{
if (value != _myUserControl1Visibility)
{
_myUserControl1Visibility = value;
OnPropertyChanged("MyUserControl1Visibility");
}
}
}

此外,MainWindow 和 MainWindowViewModel 具有使用户能够在两个 MyUserControl 实例之间切换的按钮和命令。也就是说,任何时候都只显示其中一个。

这工作得很好……直到 UserControls 有了自己的 ViewModel。现在运行时尝试在 UserControls 的 ViewModels 上而不是 MainWindow 的 ViewModel 上找到绑定(bind)的 VisibilityProperties (MyUserControl1Visibility...)。

如何使这些绑定(bind)转到 MainWindowViewModel 而不是 UserControl 实例的相应 ViewModel?

最佳答案

Visibility="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=DataContext.MyUserControl1Visibility}"

关于WPF MVVM - 将 UserControls 上的属性绑定(bind)到容器的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4402100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com