2010-07-14 2 views
4

데이터 바인딩을 사용하는 여러 RadioButton 컨트롤이 포함 된 WPF ListView 컨트롤이 있습니다. 그룹의 첫 번째 RadioButton을 기본적으로 확인해야하며, 프로그래밍 방식이 아닌 XAML로 설정하는 것이 좋지만이를 달성하지 못했습니다. 컨트롤ListView 컨트롤의 첫 번째 WPF RadioButton에 대한 XAML을 기본적으로 설정하려면 어떻게해야합니까?

내 XAML은 다음과 같습니다

 <ListView ItemsSource="{Binding OptionsSortedByKey}" > 
      <ListView.ItemTemplate> 
       <DataTemplate DataType="{x:Type Logging:FilterOptionsRadioListViewModel}"> 
        <RadioButton Content="{Binding Value}" /> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

OptionsSortedByKey 속성은 SortedList이다.

내가로드 이벤트에 RadioButton 컨트롤의의 IsChecked 속성을 설정하여 서투르게 이런 짓을했는지 : 나는 지금까지 거라고

 var button = sender as RadioButton; 

     if (button != null) 
     { 
      if (button.Content.ToString().ToUpperInvariant() == "ALL") 
      { 
       button.IsChecked = true; 
      } 
     } 

는 XAML에서 데이터 바인딩을 통해 그것을 할 것을 선호합니다. 간단한 방법이 있습니까? 당신은 할 수

답변

6

:

값이 null 경우 컨버터가 true을 반환
<RadioButton IsChecked="{Binding RelativeSource={PreviousData}, Converter={StaticResource NullAsTrueConverter}}"/> 

.

즉, MVVM 기반 방식을 사용하면이 작업을 신속하게 처리 할 수 ​​있습니다. 당신은 단지 좋겠 :

<RadioButton IsChecked="{Binding IsChecked}"/> 

그리고 기본 뷰 모델은 컬렉션의 첫 번째 아이 뷰 모델 trueIsChecked을 설정합니다.

+0

켄트, 멋지 네요. 내 컬렉션으로 SortedList를 사용하여 하위 뷰 모델을 만드는 것을 피했습니다. 더 나은 방법은 DictionaryEntry 필드와 IsChecked 속성만으로 하위 뷰 모델 클래스를 만드는 것입니다. 쉽게 할 수있을만큼, 나는 모든 필요를 충족시키는 것처럼 보이는 컬렉션 클래스를 사용하여 작업을 최소화하려고했습니다. –

+0

@Val : 그렇습니다. 데이터 항목을 래핑하는 VM을 만드는 경향이 있습니다. 매우 단순한 경우에도 마찬가지입니다. 때마다 그것을 해제하고 그냥 데이터 항목을 사용하여 도망 치려고 언제든지, 나는 항상 그것을 후회했다. ... –

+0

켄트, 그건 정확히 지금 내가 한 일이고 그 이후로 자식 VM이 어쨌든 필요로하는 다른 속성을 찾았습니다. 그 자식 VM이 이미 자리 잡게하는 것이 좋았습니다. 나는 다시 시도를하지 않을 것이다. 도와 주셔서 감사합니다. –