我有一些控件需要根据一些计算的结果隐藏或禁用。 我想将 IsEnabled 或 IsVisible 属性绑定(bind)到父表单类的某些方法或属性获取的结果。像这样的事情:
<TabItem Name="MyTab" Header="This should be enabled when result is 2" IsEnabled="{Binding MyMethod}">
<!--Some other stuff-->
</TabItem>
并在后面的代码中:
public bool MyMethod()
{
return _valueA + _valueB == 2;
}
您能帮我找到实现这一目标的正确方法吗?
谢谢吉克拉
最佳答案
您可能需要使用MultiBinding
:
<TabItem Name="MyTab" Header="This should be enabled when result is 2">
<TabItem.IsEnabled>
<MultiBinding Converter={StaticResource MyAddConverter}>
<Binding Path=ValueA UpdateSourceTrigger=PropertyChanged />
<Binding Path=ValueB UpdateSourceTrigger=PropertyChanged />
</MultiBinding>
</TabItem.IsEnabled>
<!--Some other stuff-->
</TabItem>
在您的 ViewModel 中,您应该具有以下内容(假设您的 ViewModel 实现了 INotifyPropertyChanged
):
public double ValueA
{
get { return _valueA; }
set
{
_valueA = value;
OnPropertyChanged("ValueA");
}
}
对于 ValueB
也是如此,这将允许 WPF 每次 ValueA
或 ValueB
时更新 Binding
变化
您的转换器应如下所示:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double valueA = (double)values[0];
double valueB = (double)values[1];
return valueA + valueB == 2;
}
这将允许您在转换器中定义一个外部方法,每次 ValueA 或 ValueB 发生更改时都会再次调用该方法。
我想说这就是你所需要的 =)
关于c# - 如何将 IsEnabled 或 IsVisible 属性绑定(bind)到方法或属性获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915219/