2011-06-16 14 views

回答

1

這不是你應該考慮的方式。 WPF鼓勵使用MVVM,所以你應該準備好你的VM類,以便它具有你應該綁定到的適當屬性(也可能是模型類)。不要將邏輯/驗證邏輯放入GUI中。

1

爲什麼不考慮使用命令綁定?見/嘗試例如下面簡單的例子:

<Window.CommandBindings> 
    <CommandBinding Command="Save" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed" /> 
</Window.CommandBindings> 
<StackPanel> 
    <TextBox Name="TextBox1"/> 
    <Button Content="Save" Command="Save"/> 
</StackPanel> 

的CommandBinding有一個屬性[CanExecute],您可以使用在代碼啓用/禁用您的按鈕後面:

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = (this.TextBox1.Text == "test"); 
    } 

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
    { 
     // put your command-logic here 
    } 

在這個例子中,你必須輸入值「test」來啓用按鈕並執行你的命令邏輯。

0

綁定按鈕命令(例如保存命令)
綁定TextBox.Text一個屬性(如string MyTextBoxText
綁定ComboBox的selectedItem設置爲一個屬性(或者甚至是的ItemSource)(例如object MySelectedItem
命令的CanExecute有這樣的代碼:

return !string.IsNullOrWhiteSpace(MyTextBoxText) && (MySelectedItem != null); 
0

上要啓用/禁用

0按鈕使用MultiBinding和轉換另一種方式來做到這一點

您需要創建IMultiValueConverter interface的實現,該實現測試ComboBox.SelectedValue和TextBox.Text屬性的值,並返回true或false,然後將其分配給Button.IsEnabled屬性。這裏是一個可行的簡單轉換,但是你要確保定製一個您的特定需求:

public class MyMultiValueConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (values == null) 
      return false; 

     return values.All(c => c is String ? !String.IsNullOrEmpty((string)c) : c != null); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

雖然這種方法確實可行,我傾向於用,你應該使用時,命令其他答案同意可能通過多重綁定和轉換器。

相關問題