【问题标题】:How can I bind to whether any/none `RadioButton` of a certain group is selected?如何绑定是否选择了某个组的任何/无“RadioButton”?
【发布时间】:2015-07-07 20:19:00
【问题描述】:

如何绑定是否选中了某个组的任何/无RadioButton

比如说,我有 4 个RadioButtons。最初它们都没有被选中,因此“下一步”按钮被禁用。用户必须做出选择才能启用“下一步”按钮并继续。

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    第一个解决方案效率不高,因为每个新的 RadioButton 都需要添加额外的 DataTrigger

      <StackPanel>
        <RadioButton Name="x1"/>
        <RadioButton Name="x2"/>
        <RadioButton Name="x3"/>
        <RadioButton Name="x4"/>
        <Button Content="Click">
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="IsEnabled" Value="False"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=x1, Path=IsChecked}" Value="True">
                            <Setter Property="IsEnabled" Value="True"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=x2, Path=IsChecked}" Value="True">
                            <Setter Property="IsEnabled" Value="True"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=x3, Path=IsChecked}" Value="True">
                            <Setter Property="IsEnabled" Value="True"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=x4, Path=IsChecked}" Value="True">
                            <Setter Property="IsEnabled" Value="True"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </StackPanel>
    

    后者又基于 MVVM。您创建在ViewModel中进行检查的属性,并且每当检查任何RadioButton时,都会将其设置为TRUE,并根据此值设置您的按钮设置其ISENABLE属性。

    XAML

    <StackPanel>
        <StackPanel.Resources>
            <Style TargetType="RadioButton">
                <Setter Property="Command" Value="{Binding RadioButtonCheckedCommand}"/>
            </Style>
        </StackPanel.Resources>
        <RadioButton Name="x1"/>
        <RadioButton Name="x2"/>
        <RadioButton Name="x3"/>
        <RadioButton Name="x4"/>
        <Button Content="Click" IsEnabled="{Binding IsChecked}"/>
    </StackPanel>
    

    视图模型

        class MainViewModel : INotifyPropertyChanged
    {
        private bool _isChecked;
    
        public bool IsChecked
        {
            get { return _isChecked; }
            set
            {
                _isChecked = value;
                OnPropertyChanged();
            }
        }
    
        private RelayCommand _radioButtonCheckedCommand;
    
        public RelayCommand RadioButtonCheckedCommand
        {
            get
            {
                return _radioButtonCheckedCommand ??
                       (_radioButtonCheckedCommand = new RelayCommand(() => IsChecked = true));
            }
        }
    
        public void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2011-06-18
      • 1970-01-01
      • 2016-02-19
      • 2013-03-17
      • 2017-03-12
      • 2018-01-23
      • 2014-01-29
      • 2016-02-06
      相关资源
      最近更新 更多