C# 如何将IsEnabled或IsVisible属性绑定到方法或属性get?
我有一些控件,我需要根据一些计算结果隐藏或禁用这些控件。 我想将IsEnabled或IsVisible属性绑定到父窗体类的某个方法或属性get的结果。大概是这样的:C# 如何将IsEnabled或IsVisible属性绑定到方法或属性get?,c#,.net,wpf,isenabled,C#,.net,Wpf,Isenabled,我有一些控件,我需要根据一些计算结果隐藏或禁用这些控件。 我想将IsEnabled或IsVisible属性绑定到父窗体类的某个方法或属性get的结果。大概是这样的: <TabItem Name="MyTab" Header="This should be enabled when result is 2" IsEnabled="{Binding MyMethod}"> <!--Some other stuff--> </TabItem> public
<TabItem Name="MyTab" Header="This should be enabled when result is 2" IsEnabled="{Binding MyMethod}">
<!--Some other stuff-->
</TabItem>
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;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double sumValue = (double)value;
if(sumValue==2)
{
return true;
}
return false;
}
你能帮我找到一个合适的方法来实现这一点吗
Thx,JiKra您可能需要使用多绑定:
<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>
对于ValueB
,这将允许WPF在每次ValueA
或ValueB
更改时更新绑定
您的转换器应如下所示:
<TabItem Name="MyTab" Header="This should be enabled when result is 2" IsEnabled="{Binding MyMethod}">
<!--Some other stuff-->
</TabItem>
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;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double sumValue = (double)value;
if(sumValue==2)
{
return true;
}
return false;
}
这将允许您在转换器中定义一个外部方法,每当ValueA或ValueB发生更改时,将再次调用该方法
我想说这就是您所需要的一切=)您不能直接绑定到方法。它必须是一个财产。尽管如此,还有一些其他技巧可以绑定到问题中所示的方法 回到你的问题,我要做的是使我的方法成为一个属性
public double SumAB
{
get{ return _valueA + _valueB;}
}
然后为绑定添加转换器:
<TabItem Name="MyTab" Header="This should be enabled when result is 2" IsEnabled="{Binding SumAB, Converter={StaticResource SumValueToBoolConverter}}">
您需要创建一个新属性,该属性表示您在此处尝试实现的价值。这就是视图模型的全部用途。我强烈建议您避免在这里使用转换器,即使它可以工作。转换器应用于处理仅视图问题,而这是视图状态问题 潜在的视图模型如下所示:(我正在使用我的) 这似乎有点冗长,但我想强调以下几个原因:
- 随着需求的变化,很容易找到和更改
updateStabsEnabled
- 当
和ValueA
成为其他功能的组件时,很容易将钩子添加到它们受尊重的ValueB
方法中OnChanged
- 根据需要将
绑定到IsTabEnabled
或IsEnabled
很容易Visibility
public bool已启用{get{return true;}}}
,它很容易满足您的需要。WPF中绑定到方法的最佳实践是使用转换器(或上面的解决方法)。我相信有几种方法可以做到这一点,但我还没有研究过,因为转换器可以满足我的需要,并且更易于维护。这里列出了一些解决方法:如果您确实需要绑定到方法,最好在ViewModel中设置更新条件,而不是使用转换器。