c# - 如何将 IsEnabled 或 IsVisible 属性绑定(bind)到方法或属性获取?

标签 c# .net wpf isenabled

我有一些控件需要根据一些计算的结果隐藏或禁用。 我想将 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 每次 ValueAValueB 时更新 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/

相关文章:

c# - 办公文件转PDF

c# - 从 Webclient 调用标签 javascript 点击函数

.net - string.Empty 在 CLR 中占用多少空间

wpf - WPF中是否有一个 "Pens"类来补充 "Brushes"和 "Colors"?

c# - 动态数据展示(D3)——生成多图

c# - 如何锁定自动对焦

c# - 使用已知名称注册 channel ,然后通过该已知名称检查和注销它而不终止其他应用程序 channel

c# - 如何通过在 C# 中生成 IL 将 Action<T> 转换为编译表达式或 DynamicMethod?

.net - 强制自定义 WPF 控件正确调整大小

c# - C#如何获取声音输入的名称