/ / Zmiana widoku listy (MVVM) - c #, wpf, listview, mvvm-light

Zmienianie widoku list (MVVM) - c #, wpf, listview, mvvm-light

Zastanawiam się, jaki projekt najlepiej wyświetlać dynamicznie w widoku listy.

To, czego chcę, to (na przykład) w zależności od przycisku opcji, widok listy powinien być wypełniony elementami (ustawienie ItemsSource, zmiana szerokości kolumny, nazwy i informacje o samym wierszu).

To, co aktualnie robię, dynamicznie zmienia wszystkie właściwości widoku listy.

Zastanawiam się, czy lepiej byłoby użyć wielu widoków listy (może nawet jako kontrolek użytkownika), wszystko w tej samej pozycji okna i ukryć wszystkie nieużywane.

Ponadto, ponieważ używam MVVM Light / WPF, chcę w miarę możliwości podłączyć go do kodu XAML.

Odpowiedzi:

2 dla odpowiedzi № 1

Jeśli zmiany w ItemsSource występują w czasie (lub chcesz je zmienić w zależności od pewnych warunków, takich jak właściwość IsChecked RadioButton), musisz zastanowić się nad zmianą DataTemplate. Wyjście to tworzenie DataTrigger który zamieni twoje DataTemplates w oparciu o pewne kryteria.

   <ListView>
<ListView.Style>
<Style TargetType="ListView">
<Setter Property="ItemsSource" Value="{Binding InitalSource}"/>
<Setter Property="ItemTemplate" Value="{StaticResource InitialDataTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=RadioButton, Path=IsChecked}" Value="True">
<Setter Property="ItemsSource" Value="{Binding AnotherSource}"/>
<Setter Property="ItemTemplate" Value="{StaticResource AnotherDataTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.Style>
</ListView>

Kiedy warunek DataTriggera przestaje być prawdziwy, wszystkie zmiany wprowadzone przez Setery domyślnie znika, dlatego nie trzeba dodawać innego DataTriggera w przypadku wartości False dla IsChecked RadioButton.