2015-05-21 55 views
4
<GroupBox x:Name="groupBox" Header="Operating System" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="74" Width="280"> 
     <StackPanel> 
      <RadioButton GroupName="Os" Content="Windows 7 (64-bit)" IsChecked="True"/> 
      <RadioButton GroupName="Os" Content="Windows 7 (32-bit)" /> 
     </StackPanel> 
    </GroupBox> 

我在我的應用程序的多個單選按鈕組如何找出哪個按鈕被選中?

如何訪問其中一個已經在代碼隱藏使用C#檢查?

在每個RadioButton上使用x:Name =是否絕對有必要?還是有更好的方法?

代碼示例總是讚賞

+0

請參閱http://stackoverflow.com/q/9145606/546730 –

+0

該示例是關於ListBox –

+0

不,您不明白。 ListBox只是爲了跟蹤你的選擇。 –

回答

5

是的!有一個更好的方法,它叫做綁定。結合外,你幾乎卡住(我可以想像單獨處理所有的檢查活動,並分配到一個枚舉,但事實是否真的更好?)

單選按鈕,您通常會使用一個enum來代表所有可能的值:

public enum OsTypes 
{ 
    Windows7_32, 
    Windows7_64 
} 

然後將每個單選按鈕綁定到VM上的全局「selected」屬性。你需要爲這個ValueEqualsConverter

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value.Equals(parameter); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((bool)value) ? parameter : Binding.DoNothing; 
    } 

然後你的單選按鈕看起來像:

<RadioButton Content="Windows 7 32-bit" 
      IsChecked= "{Binding CurrentOs, 
         Converter={StaticResource ValueEqualsConverter}, 
         ConverterParameter={x:Static local:OsTypes.Windows7_32}}" 

當然,你必須在你的虛擬機屬性:

public OsTypes CurrentOs {get; set;} 

沒有X:名稱,複雜的switch語句或其他任何內容。漂亮,乾淨,設計精良。 MVVM 使用WPF工作,使用它!

+0

我需要不同的班級來管理單選按鈕嗎?我很新MVVM –

+0

@softwareisfun我不確定你的意思,但我不這麼認爲。您需要一個數據上下文(視圖模型),這是我沒有提供完整代碼的唯一部分。如果您遇到了MVVM的基本問題,請隨時加入我的WPF聊天室http://chat.stackoverflow.com/rooms/18165/wpf – BradleyDotNET

+0

我只需爲每個單選按鈕設置一個布爾值並跳過轉換器需求,但我可以看到如何使用Enum's很好 – Julien

相關問題