我在Model类中有一个静态bool属性,我将它暴露给两个不同的ViewModel类。其中一个ViewModel具有链接到所述静态属性的bool属性,并通过转换器绑定到按钮的可见性。然后可以在ViewModel中将其设置为true或false,并且按钮的可见性也会相应地更改。 (此ViewModel的实例在View的XAML中设置,通过DataContext,按钮所在的位置) 我希望能够在不同的视图中更改此按钮的可见性,我认为通过在我单独的View的ViewModel中添加一个属性,该属性也链接到我原始模型中的静态bool,我可以这样做,但它不是什么都不做。
这是我的代码:
MainModel
public class MainModel
{
static bool _ButtonIsVisible = true;
public static bool ButtonIsVisible
{
get { return _ButtonIsVisible; }
set { _ButtonIsVisible = value; }
}
}
MainViewModel
class MainViewModel: ObserveableObject
{
public bool ButtonIsVisible
{
get { return MainModel.ButtonIsVisible; }
set
{
MainModel.ButtonIsVisible = value;
RaisePropertyChanged("ButtonIsVisible");
}
}
}
的MainView
<Window x:Class="MVVM.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:MVVM"
mc:Ignorable="d"
Title="MainWindow" Width="1920" Height="1080" WindowState="Maximized" WindowStyle="None">
<Window.DataContext>
<local:MainViewModel/>
</Window.DataContext>
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisConverter"/>
</Window.Resources>
<Button Visibility="{Binding ButtonIsVisible, Converter={StaticResource BoolToVisConverter}}" />
</Window>
MainViewModel中的ButtonIsVisible在命令中更改,这可以按预期工作。这就是我遇到麻烦的地方。
AnotherViewModel
class AnotherViewModel: ObserveableObject
{
public bool ButtonIsVisible
{
get { return MainModel.ButtonIsVisible; }
set
{
MainModel.ButtonIsVisible = value;
RaisePropertyChanged("ButtonIsVisible");
}
}
}
AnotherViewModel的一个实例是通过它的相应视图的DataContext创建的,一个命令被绑定到这个视图中的一个按钮,我在其中从AnotherViewModel改变ButtonIsVisible属性,此时我希望我的MainView中的按钮到更改,看到两个ViewModel从我的MainModel中的静态属性获取并设置有问题的属性的值,但这不起作用。 谁能告诉我我做错了什么?
答案 0 :(得分:1)
根据你的评论,你有类似的东西:
<ContentControl Content="{Binding ViewModel}" />
当你想要展示它时,你正在这样做:
ViewModel = new AnotherViewModel();
所以你在AnotherViewModel中需要的是:
MainViewModel MVM;
public AnotherViewModel(MainViewModel _mvm)
{
this.MVM=_mvm;
}
然后,您必须将AnotherVieModel Instantation更改为:
ViewModel = new AnotherViewModel(this);
当您想要更改按钮的可见性时,您只需要执行此操作:
this.MVM.ButtonIsVisible=true;
正如我告诉过你的,这只是一种方法,但我觉得这很简单明了。如果您有疑虑,请随时提出。