[英]How to bind IsEnabled or IsVisible property to a method or property get?
我有一些控件需要根據某些計算結果隱藏或禁用。 我想將IsEnabled或IsVisible屬性綁定到父表單類的某些方法或屬性get的結果。 像這樣:
<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;
}
您能幫我找到實現這一目標的適當方法嗎?
Thx,吉克拉
您可能需要使用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;
}
這將允許您在Converter中定義一個外部方法,每次ValueA或ValueB更改時都會再次調用該方法。
我會說這就是您所需要的=)
您需要創建一個新屬性,該屬性表示您要在此處嘗試實現的值。 這是視圖模型的全部目的。 我強烈建議您避免在此處使用轉換器,即使它可以工作。 應該使用轉換器來處理僅視圖問題,而這是視圖狀態問題。
潛在的視圖模型如下所示:(我正在使用BindableBase )
class AddingViewModel : BindableBase {
private int _valueA;
public int ValueA {
get { return _valueA; }
set { SetProperty(ref _valueA, value, "ValueA", OnValueAChanged); }
}
private void OnValueAChanged() { UpdateIsTabEnabled(); }
private int _valueB;
public int ValueB {
get { return _valueB; }
set { SetProperty(ref _valueB, value, "ValueB", OnValueBChanged); }
}
private void OnValueBChanged() { UpdateIsTabEnabled(); }
private bool _isTabeEnabled;
public bool IsTabEnabled {
get { return _isTabEnabled; }
private set { SetProperty(ref _isTabEnabled, value, "IsTabEnabled"); }
}
private void UpdateIsTabEnabled() {
IsTabEnabled = _valueA + _valueB == 2;
}
}
這似乎有些冗長,但我想強調一些原因:
UpdateIsTabsEnabled
。 ValueA
和ValueB
成為其他功能的組成部分,因此很容易在它們受人尊敬的OnChanged
方法中添加掛鈎。 IsTabEnabled
綁定到IsEnabled
或Visibility
很容易。 您不能直接綁定到方法。 它必須是一個屬性。 話雖如此,還有其他一些技巧可以綁定到此問題中所示的方法上。在WPF中綁定到方法上嗎? 。
回到您的問題,我要做的是將MyMethod設置為屬性。
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}}">
您的轉換器代碼如下所示:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double sumValue = (double)value;
if(sumValue==2)
{
return true;
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.