2016-05-28 79 views
1

我对编程很陌生,目前正在学习C#和MVVM模式。C#MVVM:将一个RadioButton绑定到一个布尔属性

我需要为大学的ChiliPlants编写一个数据库工具。 在那里你应该可以添加一个新的对象到ObservableCollection。

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

我现在想要将两个RadioBox绑定到名为“HybridSeed”的属性。这是在视图模型中定义:

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

但是如何在这些单选按钮,用户点击的结果绑定到这个HybridSeed房产吗?重要的是,结果是一个布尔。

我抬头几乎每一个类似于这个主题的条目,但我没有找到一个简单的解决方案。或者我可以用我的不好的编码技巧,了解:(一解...

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

如果有是一个使用CheckBox或ComboBox的更简单的解决方案,它也是完美的。最重要的是有一个很好的用户界面。现在它只能用于TextBox,用户必须始终写入“True”或“False”。

解决方案:

我加入了IsClicked属性的 “Yes” 单选按钮绑定到我的boulean属性:IsClicked = “{结合HybridSeed}”。感谢naslund为他的快速答案:)

回答

5

只要将HybridSeed绑定到是 - 单选按钮。如果用户选择了该选项,则该值为真,如果选择了无单选按钮(或者没有选择任何值),则该值为真。在这种情况下绑定到两个按钮是有点冗余的,因为单选按钮的机制负责处理它。

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)); 
    } 
} 
+0

太好了!感谢您的快速和简单的答案:)现在我知道,我的问题是有点愚蠢,但没有人出生的编码天才对吗? :) – ccdreyer

+0

不,这是一个很好的问题。当我开始使用MVVM时,我经常忘记你可以将值绑定到基本上任何属性,但是当你掌握它的时候它是非常强大的。 – naslund

相关问题