MVVM 모델을 사용하여 WPF 창의 목록 상자에 표시하려는 ObservableCollection> 속성이 있습니다. 이상적으로 나는 bool에 대한 체크 박스와 문자열에 대한 레이블이있는 목록 상자를 갖고 싶습니다. 사용자가 체크 상자의 값을 변경하면 해당 bool이 변경됩니다. 이 일을하는 가장 좋은 방법은 무엇입니까?MVVM을 사용하여 옵션 목록 작성
4
A
답변
2
MVVM 방식을 따르고 싶다면 ObservableCollection의 모든 요소는 ViewModel이어야합니다.
이 viewModels는 string Description
및 bool IsSelected
2- 속성을 노출한다.
그러면 각 데이터 바인딩 된 ViewModel에 대한 확인란과 텍스트 블록을 표시하기 위해 ListBox를 스타일로 제공하면됩니다.
다음 XAML은 이러한 스타일을 구현합니다. 참고 : 사용자 정의 DataContext는 ObservableCollection<YourClass> Items { get; set; }
속성을 포함하는 ViewModel을 보유해야하며 YourClass는 string Description { get; set; }
및 bool IsSelected { get; set; }
을 노출합니다. 당신은 분명히 거기에 INotifyPropertyChanged
마법을 던지기를 원할 것입니다.
<Grid>
<Grid.Resources>
<Style x:Key="CheckBoxListStyle" TargetType="ListBox">
<Style.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="itemChoix" Margin="5,5,0,0" IsChecked="{Binding IsSelected, Mode=TwoWay}" IsEnabled="{Binding IsEnabled, Mode=TwoWay}" />
<TextBlock Margin="5,5,0,0" Text="{Binding Description, Mode=TwoWay}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Style.Resources>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderThickness" Value="0" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="1" Style="{StaticResource BoxBorder}" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid>
<ListBox ItemsSource="{Binding Path=Items}" SelectionMode="Multiple" Style="{StaticResource CheckBoxListStyle}"/>
</Grid>
</Border>
</Grid>
0
- 는
- 가에 isSelected 부울 속성을 만들기 당신의 ViewModel에 공개 ObservableCollection에 속성을 만듭니다.
- 생성자 또는 명령에서 채우기를 채 웁니다.
- IsSelected 속성을 설정하는 확인란의 명령을 만듭니다.
- 는 XAML 바인딩을 수행
3
정의, 모델 ItemsControl에를 사용해보십시오, 체크 박스의 목록에 결합하지 않는 : 뷰 모델에서
<ItemsControl ItemsSource="{Binding YourModelList}">
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=Selected}"/>
<TextBlock Text="{Binding Path=Description}" />
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl>
:
public ObservbleCollection<YourModel> YourModelList { get; set; }
을
그리고 모델 :
public class YourModel
{
public bool Selected {get;set;}
public string Description {get;set;}
public int ID {get;set;}
}
필요에 따라 INotifyPropertyChanged 구현
관련 문제
- 1. ggplot2 테마 옵션 목록?
- 2. MVVM을 사용하여 복잡한 UI 관리
- 3. MVVM을 사용하여 컨트롤에 컨트롤 포함
- 4. dropdownlist의 옵션 목록 복사. JQuery와
- 5. ListBox를 사용하여 MVVM을 사용하여 TextBox를 탐색하십시오.
- 6. 드롭 다운 목록 작성
- 7. 2D 목록 작성 방법보기
- 8. '2d'Haskell 목록 작성
- 9. MVVM을 사용하여 이러한 응용 프로그램을 구현하는 방법
- 10. Microsoft Word 2007 문서 작성 자동화 옵션
- 11. 텍스트 파일에서 HTML의 목록 옵션
- 12. 목록 및 하위 목록 작성 방법 - 안드로이드?
- 13. C# XML 주석 - 목록 작성
- 14. 루프 내에서 선택 목록 작성
- 15. Fancybox 플러그인 : 즉석에서 href 옵션 재 작성
- 16. 작성 중 CSV 파일 형식 지정 옵션
- 17. eclipse helios의 동적 웹 프로젝트 작성 옵션
- 18. 양식 작성, 배포 및 정보 수집을위한 옵션
- 19. Sharepoint 2010 목록 작성 제한
- 20. 이메일 메신저 목록 작성 방법
- 21. WPF MVVM을 사용하여 메뉴를 병합하는 방법은 무엇입니까?
- 22. MVVM을 사용하여 애니메이션을 시작하는 방법은 무엇입니까?
- 23. MVVM을 사용하여 WPF의 컨트롤에 포커스 설정
- 24. MVVM을 사용하여 테스트 우선 개발을 수행하는 방법
- 25. Silverlight에서 mvvm을 사용하여 비동기 호출을 수행합니다.
- 26. MVVM을 사용하여 Combobox 상호 작용 해결
- 27. MVVM을 사용하여 WPF 창을 어떻게 이동해야합니까?
- 28. MVVM을 사용하여 데이터베이스에서 확인란을 동적으로 생성
- 29. MVVM을 사용하여 알림 제어를 만드는 방법은 무엇입니까?
- 30. mvvm을 사용하여 silverlight 4 버튼에 바인딩 명령
이것은 정말 좋은 것처럼 보입니다. 솔루션을 구현하고 구현하는 데 시간이 좀 걸립니다. – PlTaylor
나는 거기 90 %의 길이다. ObservableCollection이있는 기본 뷰 모델이 있습니다. 그런 다음 CheckBoxListItem은 공용 bool IsSelected가있는 뷰 모델입니다. { get { return this.isSelected; } 세트 { this.isSelected = value; this.RaisePropertyChanged ("IsSelected"); } } 확인란을 선택하면 IsSelected가 설정되지만 기본보기 모델에있는 메서드를 실행하려면 어떻게해야합니까? –
PlTaylor
IsSelected setter에서 메서드를 호출 할 수 없습니까? –