【发布时间】: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 是的,我做到了。它的
<Page.DataContext> <StaticResource ResourceKey="MainViewModel"/> </Page.DataContext>但它的MainVM因为我需要从那里进行源绑定 -
可以试试这样绑定吗:
Visibility="{Binding Instance.IsOriginalImgVisible,Source={StaticResource EditModeSwitcher}...?我认为您指的是两个不同的对象-一个类是在资源中使用<viewModels:EditModeSwitcher x:Key="EditModeSwitcher"/>创建的,第二个是内部的实例。虽然它们都有一些静态属性,但 INotify 需要引用同一个类。 -
@Romasz 是的,它有帮助!
标签: c# xaml mvvm singleton uwp