2011-05-13 102 views
0

基本上我有一個用戶控件中的單選按鈕集合。我希望這些與ViewModel中的列表保持一致。將WPF單選按鈕綁定到ViewModel中的RadioButton`

目前我必須將每個屬性的幾乎所有屬性都綁定到ViewModel集合中的適用索引。 E.g:

<RadioButton x:Name="btnStatus2" IsChecked="{Binding Path=radioButtonsIsChecked, Mode=TwoWay}" 
        Content="{Binding Path=StatusButtonList[1].Content, Mode=TwoWay}" 
        Tag="{Binding Path=StatusButtonList[1].Tag, Mode=TwoWay}" 
        Visibility="{Binding Path=StatusButtonList[1].Visibility, Mode=OneWay}" 
        GroupName="statusBtns" Grid.Column="1" Grid.Row="0" > 

正如你所看到的視圖將是相當大的,如果我在我的控制10個單選按鈕。我很新的WPF和任何意見將不勝感激。謝謝!

回答

1

使用ItemsControl並將ItemsSource屬性設置爲viewmodel中的集合。

<ItemsControl ItemsSource="{Binding Path=RadioButtons}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <RadioButton IsChecked="{Binding Path=IsRadioButtonChecked}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

WPF中還有ItemsControl的特殊派生類型,它們提供了附加功能(滾動,選定項目等)。 ListView,ListBox,ComboBox,DataGrid,TreeView等都是ItemsControls,你也可以在這裏使用

+0

好的,謝謝你的好友。看起來這是最好的解決方案,但是將這些項目安裝到網格中是一個挑戰,因爲其中有10個。這是我掛上的部分。我想我可以編程指定網格值?原諒我的週五下午的感受.. – JBeagle 2011-05-13 14:42:08

+0

一個ItemsControl有一個ItemsPanelTemplate屬性,它指定了項目的佈局。默認情況下,它使用StackPanel,所以你不需要在你的RadioButton上指定Grid.Column和Grid.Row。 RadioButtons將相互疊加 – kenwarner 2011-05-13 15:34:24

+0

'WrapPanel'或'UniformGrid'可能是不錯的選擇。 – svick 2011-05-13 18:15:33