Windows Phone 8.1 上的 RadioButtons 绑定

RadioButtons binding on Windows Phone 8.1

我在绑定 RadioButton 属性 IsChecked 时遇到了一些问题。我在网格上有两个 RadioButtonVisibility 绑定到我的视图模型上的 属性。我想要实现的是始终将第一个 RadioButton 设置为 Checked 状态,当网格变得可见时。 这是一些代码:

<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>

按照我的逻辑,当 属性 State 进入特定状态时,当网格变得可见时,它应该首先设置 RadioButton 为已检查。在我达到第二个 RadioButton 之前,它工作正常。然后我的绑定不起作用,当 State 发生变化时,我的 StateToBooleanConverter 什么也没有发生。 我阅读了很多关于单选按钮绑定问题的信息,但在我的案例中没有任何效果。 是否可以在没有 new 属性 的情况下检查 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;
    }
}

假设 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>