#c# #wpf #reflection #proxy
#c# #wpf #отражение #прокси
Вопрос:
Необходимо отобразить элемент, представленный в виде, как на картинке, в виде дерева. Сам объект создается во время компиляции.
Попытка сделать в этой форме
<TreeView
Grid.Row="1"
Grid.Column="0"
ItemsSource="{Binding LanguageInformation.Items}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:LocalizationBrowserViewModel}" ItemsSource="{Binding LanguageInformation.Items}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Класс для представления
public class Element
{
public string Name { get; set; }
public ObservableCollection<object> Items { get; set; }
public Element()
{
this.Items = new ObservableCollection<object>();
}
}
Ответ №1:
Element
Класс теперь допускает только один уровень иерархии. Для поддержки N уровней Element
класс необходимо изменить, как показано ниже
public class Element
{
public string Name { get; set; }
public ObservableCollection<Element> Items { get; set; }
public Element()
{
this.Items = new ObservableCollection<Element>();
}
}
TreeView
необходимо заменить на ListView
, поскольку скриншот, приведенный в вопросе, содержит несколько столбцов. TreeView
не допускает нескольких столбцов, кроме ListView
.
ListView
в WPF поддерживается HierarchicalDataTemplate
. Вы можете обратиться к HierarchicalDataTemplate в WPF для реализации.
Комментарии:
1. Спасибо. И как я могу правильно создать представление, учитывая, что объект является прокси? Как я могу ввести данные в поле Name? И вот еще один обновленный снимок экрана.
2. И еще один момент. Я получаю объект с помощью отражения (введите как объект). И этот объект получает свой тип при компиляции.
3. Прокси на вашем скриншоте содержит экземпляр объекта. Вы можете обновить значение этих свойств с помощью отражения.
4. Не могли бы вы объяснить, как это можно сделать? В то же время, возможно ли отобразить этот объект в виде дерева?
5. Вы можете пройти через learn.microsoft.com/en-us/dotnet/api /… чтобы увидеть образцы отражения. Также вам необходимо создать коллекцию ViewModel с использованием reflection для привязки ListView.