我的单线类中有一些属性,我想从另外两个类中更改它们。
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
属性?
答案 0 :(得分:0)
您正在创建 EditModeSwitcher 的两个类 - 一个位于资源中,位于行<viewModels:EditModeSwitcher x:Key="EditModeSwitcher"/>
,第二个位于instance = new EditModeSwitcher();
。
虽然他们有一些静态字段/属性,但 RisePropertyChanged 需要在同一个类上运行 - 它不是静态的。如果您将绑定更改为:
,它应该可以工作Visibility="{Binding Instance.IsOriginalImgVisible,Source={StaticResource EditModeSwitcher}, Converter={StaticResource BooleanToVisibilityConverter}}"/>