2011-05-13 2 views
0

기본적으로 사용자 컨트롤에는 라디오 버튼 모음이 있습니다. 나는 이것들을 ViewModel 내의 목록에 보관 된 '대응 물'과 동일하게하고 싶습니다.ViewModel 내의 RadioButton에 WPF 라디오 버튼을 바인딩합니다.

현재 각 뷰의 모든 속성을 ViewModel의 컬렉션에있는 해당 인덱스에 바인딩해야합니다. 예 :

<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

OK Thanks buddy. 이것이 가장 좋은 해결책 인 것처럼 보이지만, 10 가지가 있기 때문에 이러한 항목을 그리드 등에 맞추는 문제가 있습니다. 이것은 내가 끊어 버린 부분입니다. 프로그래밍 방식으로 모눈 값을 지정할 수 있다고 생각합니까? 내 금요일 오후의 감성을 용서하십시오 .. – JBeagle

+0

ItemsControl에는 항목의 레이아웃을 지정하는 ItemsPanelTemplate 속성이 있습니다. 기본적으로 StackPanel을 사용하므로 더 이상 RadioButton에 Grid.Column 및 Grid.Row를 지정할 필요가 없습니다. RadioButtons는 서로의 위에 쌓아 놓을 것입니다 – kenwarner

+0

'WrapPanel' 또는'UniformGrid'가 좋은 선택 일 수 있습니다. – svick

관련 문제