2015-06-10 102 views
1

我在綁定我的RadioButton屬性IsChecked時遇到了一些問題。我在網格上有兩個RadioButton,其中Visibility綁定到我的viewmodel上的一個屬性。我想要實現的是始終將第一個RadioButton設置爲Checked狀態,此時網格變得可見。 下面是一些代碼:RadioButtons綁定在Windows Phone 8.1上

<Grid Visibility="{Binding State, Converter={StaticResource VisibilityConverter}}"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="Auto" /> 
       </Grid.RowDefinitions> 


       <RadioButton Grid.Row="0" 
          Margin="20,0" 
          IsChecked="{Binding State, Converter={StaticResource StateToBooleanConverter}}" 
          Content="content 1" /> 

       <RadioButton Grid.Row="1" 
          Margin="20,0" 
          Content="content 2" /> 


      </Grid> 

按照我的邏輯,應該先設置RadioButton當財產State是要特定的狀態,當電網變得可見經過。它的工作正常,直到我第二次RadioButton。然後我的綁定不起作用,並且當State正在更改時,我的StateToBooleanConverter中沒有任何反應。 我讀了很多關於按單選按鈕綁定的問題的信息,但在我的案例中沒有任何工作。 是否有可能沒有新的屬性檢查radioButton?我將不勝感激任何意見如何我可以解決這個問題。

編輯:

有一個從視圖模型和轉換的一些代碼IsChecked

public class MainViewModel : ViewModel 
{ 
    public MainViewModel 
    { 
     this.ChangeState = new RelayCommand(this.ChangeStateExecute); 
    } 

    public PageState State 
    { 
     get 
     { 
      return this.state; 
     } 
     set 
     { 
      if (this.state != value) 
      { 
       this.state = value; 
       base.RaisePropertyChanged(); 
      } 
     } 
    } 

    public RelayCommand ChangeState { get; private set; } 

    private void ChangeStateExecute() 
    { 
     this.State = PageState.RadioButtonsVisible; 
    } 
} 

public class StateToBooleanConverter : Converter 
{ 
    protected override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var state = (PageState)value; 
     var result = state == PageState.RadioButtonsVisible; 
     return result; 
    } 
} 
+1

請附上您的CS代碼。 – lloyd

+3

'State'是否實現了'INotifyPropertyChanged'? –

+0

@ mike-eason是的,它的確如此。 – RenDishen

回答

2

假設PageState是一個枚舉,this answer is what you're looking for.

所有要組一個單選按鈕一起綁定到ViewModel的相同屬性,並全部使用相同的ValueConverter。觸發單選按鈕檢查/取消選中的值將傳遞到ValueConverter的parameter屬性中。

對於您的特定問題,EnumBooleanConverter可以直接複製粘貼到您的代碼中(請務必閱讀並確保理解它)。

的XAML則變爲

<Grid Visibility="{Binding State, Converter={StaticResource VisibilityConverter}}"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
      </Grid.RowDefinitions> 


      <RadioButton Grid.Row="0" 
         Margin="20,0" 
         IsChecked="{Binding State, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=RadioButtonVisible}" 
         Content="content 1" /> 

      <RadioButton Grid.Row="1" 
         Margin="20,0" 
         IsChecked="{Binding State, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=*Insert enum value here*}" 
         Content="content 2" /> 


     </Grid> 
+0

謝謝。你幾乎在那裏!幾乎沒有改善,我得到了我想要的東西。 – RenDishen

相關問題