2016-05-28 81 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

相關問題