2013-08-26 69 views
5

我看到很多關於如何將布爾值綁定到單選按鈕的文章。但我的情況是我需要將它綁定到一個單選按鈕並從用戶那裏讀取選擇內容。將Xaml單選按鈕綁定到布爾值

這是沒有選擇應該選擇intially。

如果我將它綁定到一個布爾值,因爲boolean cant爲null,它將顯示在單選按鈕中選擇的默認值。

如果我使用可空布爾值,當嘗試使用轉換器時,我仍默認爲false。

我不能在xaml中使用單向模式,因爲我需要檢查單選按鈕的選擇是否使用了有界變量。

Ant指針如何實現這個?

+0

如果它是一個布爾值,爲什麼你想要綁定到一個單選按鈕?複選框不會更好嗎? – ChrisF

+0

我認爲複選框,但它不會給我相同的問題? selectedvalue綁定到一個布爾值並使用轉換器將有相同的問題? –

+0

否。當布爾值爲false時,複選框爲空。如果它爲真,則檢查它。您也可以將它綁定到一個可空布爾值,並將其作爲複選框的第三個不確定狀態。你想在這裏做什麼?這個布爾值代表什麼? – ChrisF

回答

5

您可以將一個可爲null的布爾值綁定到您的單選按鈕,但您需要通過轉換器來完成此操作。

首先聲明的變量:

private bool? answer; 
public bool? Answer 
{ 
    get { return answer; } 
    set 
    { 
     answer = value; 
     if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Answer")); 
    } 
} 

,並初始化到null

然後在XAML:

<Window.Resources> 
    <local:BooleanConverter x:Key="BooleanConverter"/> 
</Window.Resources> 

<StackPanel Grid.Row="1"> 
    <RadioButton Content="I Agree" 
       IsChecked="{Binding Answer, 
          Converter={StaticResource BooleanConverter}, 
          ConverterParameter='true', Mode=TwoWay}" /> 
    <RadioButton Content="I Disagree" 
       IsChecked="{Binding Answer, 
          Converter={StaticResource BooleanConverter}, 
          ConverterParameter='false', Mode=TwoWay}" /> 
</StackPanel> 

最後你的轉換器:

class BooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var test = (bool?)value; 
     var result = bool.Parse((string)parameter); 

     if (test == result) 
     { 
      return true; 
     } 

     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var result = bool.Parse((string)parameter); 
     return result; 
    } 
} 

此結合的單選按鈕Answer並指出當值true第一個將只能託運當答案是false時,第二個將被檢查。然後,您可以在讓用戶繼續前檢查Answer是否爲空。

+0

謝謝...我使用完全相同的東西,但由於某些原因,我的視圖加載之前,布爾變得設置爲false。我認爲這是因爲轉換器。生病檢查發生了什麼,並返回 –

+1

@ashishg - 確保您在構造函數中顯式設置可空布爾值爲null。 – ChrisF

+0

這工作..問題是,我使用相同的變量名稱與其他人定義的某處,但在這裏可用,每次視圖加載它得到更新。 –

0

這可能不是最好的辦法,但你可以使用類似於這樣的東西: checkbox like radiobutton wpf c# 只是有兩個控件。

我感謝這不是最好的,但閱讀你的答案,它給你你想要的(一般)。

+0

我想過在檢查/取消選中時觸發事件,但這樣做,但是認爲它不會是一個很好的解決方案,並將其發佈到此處,以查看是否有更好的方法來做到這一點 –