绑定时遇到静态字段问题

时间:2016-05-05 14:09:00

标签: c# wpf mvvm binding static

我在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中的静态属性获取并设置有问题的属性的值,但这不起作用。 谁能告诉我我做错了什么?

1 个答案:

答案 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;

正如我告诉过你的,这只是一种方法,但我觉得这很简单明了。如果您有疑虑,请随时提出。