Как добавить расширители для просмотра из ViewModel в C#?

#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;