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 № 1Jeś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.