更改属性有问题

时间:2016-09-17 12:32:09

标签: c# xaml mvvm singleton uwp

我的单线类中有一些属性,我想从另外两个类中更改它们。

Singletone课程:

public class EditModeSwitcher:ViewModelBase//MVVMLight Libs
{
    private bool isOriginalImgVisible;

    private static EditModeSwitcher instance;

    public EditModeSwitcher()
    {
        this.isOriginalImgVisible = false;
    }

    public static EditModeSwitcher Instance
    {
        get
        {
            if (instance == null)
                instance = new EditModeSwitcher();

            return instance;
        }
    }

    public bool IsOriginalImgVisible
    {
        get { return this.isOriginalImgVisible; }
        set
        {
            this.isOriginalImgVisible = value;
            base.RaisePropertyChanged("IsOriginalImgVisible");
        }
    }
}

我只留下了一个属性,因为有类似的东西。接下来,我在App.xaml

中创建了一个实例
<viewModels:EditModeSwitcher x:Key="EditModeSwitcher"/>

我需要MainPage.xaml我需要的地方

Visibility="{Binding IsOriginalImgVisible,Source={StaticResource EditModeSwitcher}, Converter={StaticResource BooleanToVisibilityConverter}}"/>

启动Visibility属性时,但我无法更改它。 我做了什么:

使用按钮执行命令

MainViewModel:BaseViewModel

 private async void PickExecute()
    {
        EditModeSwitcher.Instance.IsFilterImgVisible = true;
        EditModeSwitcher.Instance.IsOriginalImgVisible = true;
        EditModeSwitcher.Instance.IsUserControlVisibile = false;
    }

但是我的View doest捕获了这个并且所有元素都是hide(EditModeSwitcher的构造函数中的默认值),但是在调试属性上改变了它们的值

另一个视图模型

ImageManipulatorViewModel:BaseViewModel

 public async void MakeCollageExecute()
    {
        EditModeSwitcher.Instance.IsFilterImgVisible = false;
        EditModeSwitcher.Instance.IsOriginalImgVisible = false;
        EditModeSwitcher.Instance.IsUserControlVisibile = true;
    }

我做错了什么?为什么我的View页面会改变Visibility属性?

1 个答案:

答案 0 :(得分:0)

您正在创建 EditModeSwitcher 的两个类 - 一个位于资源中,位于行<viewModels:EditModeSwitcher x:Key="EditModeSwitcher"/>,第二个位于instance = new EditModeSwitcher();

虽然他们有一些静态字段/属性,但 RisePropertyChanged 需要在同一个类上运行 - 它不是静态的。如果您将绑定更改为:

,它应该可以工作
Visibility="{Binding Instance.IsOriginalImgVisible,Source={StaticResource EditModeSwitcher}, Converter={StaticResource BooleanToVisibilityConverter}}"/>