【问题标题】:Trouble with change properties更改属性的问题
【发布时间】:2016-09-17 12:32:09
【问题描述】:

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

单音类:

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 属性?

【问题讨论】:

  • 你设置好DataContext了吗?
  • @Romasz 是的,我做到了。它的&lt;Page.DataContext&gt; &lt;StaticResource ResourceKey="MainViewModel"/&gt; &lt;/Page.DataContext&gt; 但它的MainVM 因为我需要从那里进行源绑定
  • 可以试试这样绑定吗:Visibility="{Binding Instance.IsOriginalImgVisible,Source={StaticResource EditModeSwitcher}...?我认为您指的是两个不同的对象-一个类是在资源中使用&lt;viewModels:EditModeSwitcher x:Key="EditModeSwitcher"/&gt; 创建的,第二个是内部的实例。虽然它们都有一些静态属性,但 INotify 需要引用同一个类。
  • @Romasz 是的,它有帮助!

标签: c# xaml mvvm singleton uwp


【解决方案1】:

您正在创建两个 EditModeSwitcher 类 - 一个在 &lt;viewModels:EditModeSwitcher x:Key="EditModeSwitcher"/&gt; 行中的资源中,第二个在 instance = new EditModeSwitcher(); 中。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多