【发布时间】:2014-06-19 14:00:39
【问题描述】:
在对这个问题进行了重大修改后,我希望现在已经清楚了。
当 1 次更改会影响多个属性时,我对 WPF 中的绑定感到非常困惑。
我经常使用 VVM 将我的 ViewModel 绑定到我的 View,我会说我可以接受。
我正在尝试实现一个状态控制器。这意味着,无论我在 UI 的一部分中进行什么设置,反射都会彻底结束。
例如,在我的 UI 部分,我可以打开或关闭某个功能,例如“显示图像”
当我进行此更改时,我希望我的应用程序中的所有内容都能得到通知并采取相应措施。
所以,我的 StateController 类将有一个属性
public bool ShowImages
在我看来,我可能会有类似的东西
<image Visible ="{Binding ShowImages", Converter={StaticConverter ConvertMe}}" />
我遇到的问题是如何让 StateController 向我的所有 ViewModel 发出警报。
目前,我假设在每个 ViewModel 中我必须重复相同的属性
public bool ShowImages
EG
public class StateController : BaseViewModel
{
public bool ShowImages{get;set;}//imagine the implementation is here
}
public class ViewModelB : BaseViewModel
{
public bool ShowImages{}//imagine the implementation is here
}
public class ViewModelB : BaseViewModel
{
public bool ShowImages{}//imagine the implementation is here
}
所以,我的问题是,如果我更新了 ViewModelB.ShowImages,我将如何首先通知 StateController,而后者又会更新所有 ViewModel。
这是 INotifyPropertyChanged 可以自动为我做的事情,因为它们都共享相同的 propertyName,还是我必须手动实现逻辑,例如
public static class StateController
{
public bool ShowImages{get;set;}//imagine the implementation is here
}
public class ViewModelA : BaseViewModel
{
public bool ShowImages
{
get { return StateController.ShowImages; }
set { StateControllerShowImages = value;
OnPropertyChanged("ShowImages"); }
}
}
public class ViewModelB : BaseViewModel
{
public bool ShowImages
{
get { return StateController.ShowImages; }
set { StateControllerShowImages = value;
OnPropertyChanged("ShowImages"); }
}
}
我讨厌上述实现的想法,但它确实显示了我想要实现的目标。我只是希望有更好的方法!
【问题讨论】:
-
你有两个不同的对象,改变其中一个的道具。 WPF 如何知道这些对象具有相同的业务角色?
-
我记得最近写了一个answer,关于使用单例在两个类之间共享一个属性。这就是你想要做的吗?
-
您应该通知您的视图有关更改。如果您有两个独立的 props 引用相同的数据模型 obj,则应更改模型,然后为这两个 props 调用 RaisePropertyChanged 以使 WPF 重新读取它们。
-
@Rachel,我不这么认为。可能是如果我说我正在尝试实现 StateController 更容易理解。因为有很多地方可以更改配置,这些应该提醒 StateController,然后通知所有 ViewModel 并相应更新......
-
我不得不承认我无法理解这个问题是关于什么的,但我所能做的就是建议您阅读 MSDN 上的Data Binding Overview 页面。此页面是一个很好的资源,广泛涵盖了非常广泛的数据绑定问题。希望阅读后,您将能够回答自己的问题。