改变属性的麻烦

本文关键字:麻烦 属性 改变 | 更新日期: 2023-09-27 18:07:17

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

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

但是我的视图没有捕捉到这一点,所有元素都隐藏(默认值在EditModeSwitcher的构造函数),但在调试属性改变了他们的值

和另一个视图模型

ImageManipulatorViewModel:BaseViewModel

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

我做错了什么?为什么我的视图页面不改变Visibility属性?

改变属性的麻烦

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

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

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