WPF Radiobutton Group - 绑定到布尔值

Posted

技术标签:

【中文标题】WPF Radiobutton Group - 绑定到布尔值【英文标题】:WPF Radiobutton Group - binding to a boolean 【发布时间】:2021-04-02 23:00:15 【问题描述】:

我有一个单选按钮组,我绑定到一个布尔值,但它没有在 XAML 中被拾取 - 我确信它很简单 - 任何指针都值得赞赏。

passed 设置为 false。

XAML

<RadioButton Width="64" 
      IsChecked="Binding passed, Converter=StaticResource BoolInverterConverter" 
      GroupName="Result">Yes</RadioButton>
<RadioButton Width="64" 
      IsChecked="Binding passed, Converter=StaticResource BoolInverterConverter" 
      GroupName="Result">No</RadioButton>

BoolInverterConverter:

public class BoolInverterConverter : IValueConverter

    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    
        if (value is bool)
        
            return !(bool)value;
        

        return value;
    

    public object ConvertBack(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    
        if (value is bool)
        
            return !(bool)value;
        

        return value;
    

未填充:

视图模型:-

  public ResultsViewModel()
  
   private Results_results = new Results();

   public ResultsViewModel()
   
      _results.Passed= false;
   
  

结果类:-

    public class Results
    
      private bool passed;

      public bool Passed get => passed; set => passed= value; 
    

【问题讨论】:

你能发布你的 ViewModel 吗?您还可以在调试时检查 Visual Studio 输出选项卡,它会告诉您是否找不到绑定。 @Seb - 添加了 ViewModel - 调试未显示绑定失败... 删除您的一个转换器。大概是的。你把两者都颠倒了。这不可能。 【参考方案1】:
<RadioButton Width="64" IsChecked="Binding Passed" GroupName="T1" Style="DynamicResource CaseSummaryOptions">Yes</RadioButton>
<RadioButton Width="64" IsChecked="Binding Passed, Converter=StaticResource InverseBoolRadioConverter" GroupName="T1">No</RadioButton>

【讨论】:

【参考方案2】:

您需要在更新视图模型字段时告知绑定。您可以通过实现 INotifyPropertyChanged 接口来实现。

让我们为此创建一个基类:

class ViewModelBase : INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged ( [CallerMemberName] string propertyName = "" )
    
        PropertyChanged?.Invoke ( this, new PropertyChangedEventArgs ( propertyName ) );
    

那你这样用(没错Results也是s ViewModel):

public class Results : ViewModelBase

    private bool passed;

    public bool Passed
    
        get  return passed; 
        set
        
            passed = value;
            OnPropertyChanged ( );
        
    

【讨论】:

以上是关于WPF Radiobutton Group - 绑定到布尔值的主要内容,如果未能解决你的问题,请参考以下文章

将单选按钮组绑定到 WPF 中的属性

WPF 样式设计之——radioButton

WPF中单选框RadioButton

让 WPF 的 RadioButton 支持再次点击取消选中的功能

[WPF 自定义控件]在MenuItem上使用RadioButton

wpf 中 RadioButton 如何切换