【问题标题】:C# MVVM: Binding a RadioButton to a boolean PropertyC# MVVM:将 RadioButton 绑定到布尔属性
【发布时间】:2016-09-26 19:38:27
【问题描述】:

我对编程很陌生,目前正在学习 C# 和 MVVM 模式。

我需要为大学的 ChiliPlants 编写一个数据库工具。 在那里,您应该能够将新对象添加到 ObservableCollection。

要向此 ObservableCollection 添加新项目,将打开一个新窗口。它看起来像这样: Window Add

我现在希望将两个 RadioBox 绑定到一个名为“HybridSeed”的属性。在 ViewModel 中定义:

//Public Property HybridSeed
    public bool HybridSeed
    {
        get { return ChiliModel.HybridSeed; }
        set
        {
            if (ChiliModel.HybridSeed == value)
                return;
            ChiliModel.HybridSeed = value;
            OnPropertyChanged("HybridSeed");
        }
    }

我的视图的 RadioBox 部分如下所示:

 <RadioButton Grid.Row="5" Content="Ja" Grid.Column="1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
    <RadioButton Grid.Row="5" Content="Nein" Grid.Column="1" HorizontalAlignment="Left" Margin="89,10,0,0" VerticalAlignment="Top"/>

但是如何将用户点击这些 RadioButtons 的结果绑定到这个 HybridSeed 属性?重要的是结果是布尔值。

我查找了几乎所有与此主题相似的条目,但没有找到简单的解决方案。或者我能够以我糟糕的编码技能理解的解决方案:( ...

如果你们能帮助我,我会很高兴。请为这个新手保持简单:)

如果有使用 CheckBox 或 ComboBox 的更简单的解决方案,它也将是完美的。最重要的是有一个漂亮的用户界面。现在它只适用于用户总是必须写“真”或“假”的文本框。

解决方案:

我在“是”单选按钮中添加了 IsClicked 属性以绑定到我的布尔属性:IsClicked="{Binding HybridSeed}"。感谢 naslund 的快速回答:)

【问题讨论】:

    标签: c# wpf mvvm data-binding radio-button


    【解决方案1】:

    只需将 HybridSeed 绑定到是单选按钮。然后,如果用户选择了该选项,则为 true;如果选择了 No-radiobutton(或未选择任何内容),则为 false。在这种情况下绑定到两个按钮有点多余,因为单选按钮的机制会处理它。

    WPF:

    <RadioButton Content="Yes" IsChecked="{Binding HybridSeed}" />
    <RadioButton Content="No" />
    <Label Content="{Binding HybridSeed}" ContentStringFormat="Value is: {0}" />
    

    逻辑:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new ViewModel();
        }
    }
    
    public class ViewModel : INotifyPropertyChanged
    {
        private bool hybridSeed;
    
        public bool HybridSeed
        {
            get { return hybridSeed; }
            set
            {
                hybridSeed = value;
                OnPropertyChanged(nameof(HybridSeed));
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    

    【讨论】:

    • 太棒了!感谢您快速简单的回答 :) 现在我意识到,我的问题有点愚蠢,但没有人天生就是编码天才,对吧? :)
    • 不,这是个好问题。当我开始使用 MVVM 时,我经常忘记您可以将值绑定到基本上任何属性,但是当您掌握它时它非常强大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2011-03-22
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多