#c# #mvvm #expander
#c# #mvvm #расширитель
Вопрос:
Я пытаюсь динамически добавлять элементы расширения из моей модели представления в мое представление. Это моя модель представления с использованием привязываемой базы Prism:
public class MyViewModel : BindableBase { public MyViewModel() { MyExpanders = new Listlt;Expandergt;(); AddAllExpanders(); } private void AddAllExpanders() { AddExpander("First expander header", "First expander content"); AddExpander("Second expander header", "Second expander content"); } private void AddExpander(string header, string content) { var expander = new Expander(); expander.Header = header; expander.HorizontalAlignment = HorizontalAlignment.Stretch; expander.Margin = new Thickness(10); expander.Background = Brushes.LightGray; expander.IsExpanded = false; expander.Content = content; MyExpanders.Add(expander); } private Listlt;Expandergt; _myExpanders; public Listlt;Expandergt; MyExpanders { get { return _myExpanders; } set { SetProperty(ref _myExpanders, value); } } }
и это мое мнение:
lt;UserControl x:Class="MyProject.Views.MyView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:MyProject.Views" x:Name="Info" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"gt; lt;Gridgt; lt;Grid.ColumnDefinitionsgt; lt;ColumnDefinition Width="1*" /gt; lt;ColumnDefinition Width="2*" /gt; lt;ColumnDefinition Width="1*" /gt; lt;/Grid.ColumnDefinitionsgt; lt;StackPanel Grid.Column="1"gt; lt;ContentControl Content="{Binding MyExpanders}"/gt; lt;/StackPanelgt; lt;/Gridgt; lt;/UserControlgt;
Это показывает только «(Sammlung)», что по-английски означает «коллекция».:
Что я упускаю?
Комментарии:
1. вы привязываетесь к инфоэкспандерам, но этого нет в коде, я думаю, вы должны быть привязаны к моим экспандерам
2. Извините, это была опечатка
3. замените список на ObservableCollectionlt;Расширительgt;, который должен сделать это за вас. WPF не знает, как визуализировать коллекции
Ответ №1:
вам нужно использовать ObservableCollectionlt;gt;, а не списокlt;gt;lt;gt;, если вы хотите привязать его
Попробуйте это:
private ObservableCollectionlt;Expandergt; myExpanders; public ObservableCollectionlt;Expandergt; MyExpanders { get =gt; this.myExpanders; set =gt; SetProperty(ref this.myExpanders, value); }
В XAML я бы сделал это с помощью элемента управления Itemscontrol:
lt;ItemsControl ItemsSource="{Binding MyExpanders}"gt; lt;ItemsControl.ItemsPanelgt; lt;ItemsPanelTemplategt; lt;StackPanel/gt; lt;/ItemsPanelTemplategt; lt;/ItemsControl.ItemsPanelgt; lt;/ItemsControlgt;