我有以下内容:
<Button Content="Do XXX" Height="23" Name="btnXXX"
IsEnabled="{Binding Path=(Model:INameOfInterface.CanDoXXX)}" />
<Button Content="Do YYY" Height="23" Name="btnYYY"
IsEnabled="{Binding Path=(Model:INameOfInterface.CanDoYYY)}" />
非常好地工作,根据界面是否可以执行XXX,启用或禁用btnXXX,对于YYY,类似于btnYYY。
但是,要为每次单击强制执行一个操作,我想在单击其中一个按钮时禁用所有按钮,即暂时覆盖依赖项并禁用按钮,然后,一旦执行了操作,重新建立依赖项条件
所以我的问题是:我如何暂时禁用所有按钮然后恢复依赖
答案 0 :(得分:1)
您可以创建bool属性并将所有按钮IsEnable绑定到它。每当你做一些动作时,将其设为假,并在完成动作后使其成为真,这反过来将影响所有按钮。或者你可以使用微调器/忙指示器。
答案 1 :(得分:1)
通常,您不“覆盖并恢复依赖项属性”,而是设计Model / ViewModel,以便绑定的属性封装所有必需的状态。在你的情况下,这意味着你的Model:INameOfInterface.CanDoXXX
最初应该是真的,并且每当执行任何按钮动作时都是假的(xxx,yyy,...)。因此,CanDoXXX
必须了解YYY
的执行情况。将它们混合在你的模型中可能是一个坏主意,这就是ViewModel发挥作用的地方。
假设您的模型实例仅具有自我意识:CanDoXXX
如果正在执行XXX
则为 。您可以拥有一个包含模型集合的ViewModel类,每个模型都有其独立的状态。现在,您只需要在VM中放置一个属性,例如CanExecuteAny
将迭代所有模型,并检查它们中是否有任何模型正在工作(CanDoXXX
,CanDoYYY
表明这一点。最后绑定
<Button IsEnabled={Binding CanExecuteAny} />
这只是潜在的解决方案之一,最好的解决方案取决于数据的确切结构。以下是其他一些想法:
ICommand
接口并将按钮的Command
属性绑定到它。见RelayCommand
概念。就个人而言,我会去追求它。话虽如此,基本的想法是在您可以绑定的单个属性中包含所有需要的信息。交换DP并不是一种真正的设计方式。 Binding
已经存在更新内容,因此多次设置它会重复相同的作业两次。