Windows Phone 8.1 上的 RadioButtons 绑定

Posted

技术标签:

【中文标题】Windows Phone 8.1 上的 RadioButtons 绑定【英文标题】:RadioButtons binding on Windows Phone 8.1 【发布时间】:2015-08-25 14:51:36 【问题描述】:

我在绑定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 没有任何反应。 我阅读了很多关于单选按钮绑定问题的信息,但在我的情况下没有任何效果。 如果没有用于检查 radioButton 的新属性,是否可以这样做?我将不胜感激任何建议我如何解决这个问题。

编辑:

IsChecked 有一些来自 viewmodel 和 Converter 的代码:

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;
    

【问题讨论】:

请附上你的cs代码。 State 是否实现了INotifyPropertyChanged @mike-eason 是的,确实如此。 @lloyd 查看我的帖子,我添加了一些代码 如何工作 base.RaisePropertyChanged(); ?? 【参考方案1】:

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

【讨论】:

谢谢。你快到了!几乎没有改进,我得到了我想要的。

以上是关于Windows Phone 8.1 上的 RadioButtons 绑定的主要内容,如果未能解决你的问题,请参考以下文章

带有 .resx 资源的 Windows Phone 8.1 上的 MissingManifestResourceException

带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP

Windows Phone 8.1 中的裁剪图像问题

将数据返回到上一页 Windows Phone 8.1 Windows RunTime

为啥重启我的设备后 Windows Phone 8.1 后台任务不起作用?

在Windows Phone 8.1模拟器上从Store安装应用程序时出现错误80070002