改变属性的麻烦
本文关键字:麻烦 属性 改变 | 更新日期: 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}}"/>