Я пытаюсь связать список элементов с моим списком, каждый элемент имеет некоторые свойства, но мне нужно связать только следующее свойство: Тип.Связать одно свойство элемента listview (UWP)
Я прочитал это thread, что очень ясно, но это не работает для меня, мое listview остается пустым ... Я проверил, содержит ли список, который я привязываю к списку, содержит элементы и содержит их.
Также я пытался связать простой «Список MyList» и без ListView.ItemTemplate и работает
После примере моего кода, у меня есть эти структуры:
public class MainType
{
public string Type { get; set;}
}
public class ChildType : MainType
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
public class SimpleClass
{
public ObservableCollection<ChildType> SimpleList { get; set; }
public SimpleClass()
{
SimpleList = new ObservableCollection<ChildType>();
SimpleList.Add(new ChildType { Prop1 = "prop1", Prop2 = "prop2", Type = "type1" }
SimpleList.Add(new ChildType { Prop1 = "prop1", Prop2 = "prop2", Type = "type2" }
}
}
в источнике где я мой список зрения у меня есть это на XAML стороне:
<ListView x:Name="myListView">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Type}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
и это на C# стороне:
public sealed partial class MyUserControl : UserControl
{
private SimpleClass MySimpleClass;
public MyUserControl()
{
this.InitializeComponent();
myListView.DataContext = MySimpleClass = new SimpleClass();
myListView.ItemsSource = MySimpleClass.SimpleList;
}
}
Кто-нибудь может сказать мне, что мне не хватает?
Спасибо!
[EDIT: приведенный выше код верен, проблема была другая. ]
Проблема была другая, внутри SimpleClass с помощью другого метода. Я десериализую json-файл в SimpleList и создаю проблемы для привязки, потому что также, если впоследствии я просто добавляю элемент через метод ADD, привязка не работает ... но если я десериализую json-файл в другой список: TempList и после использования foreach я добавляю все элементы TempList в SimpleList, он работает.
Binding не работает:
SimpleList = JsonConvert.DeserializeObject<ObservableCollection<ChildType>>(text, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
Переплётные работы:
TempList = JsonConvert.DeserializeObject<ObservableCollection<ChildType>>(text, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
foreach(ChildType item in TempList)
{
SimpleList.Add(item);
}
Я прочитал приведенные ниже комментарии. Вы должны реализовать INotifyPropertyChanged в SimpleClass, чтобы отразить элементы, добавленные в список, в UI – Archana
Привет, LovetoCode, спасибо за ваш ответ, я знаю, что INotifyPropertyChanged используется для обновления списка при изменении свойства, но в моем случае я добавляю новый элемент, для этого я не использовал INotifyPropertyChanged, но я использовал ObservableCollection <> вместо простого списка <>, я попробую ваш совет, и я дам вам знать, спасибо! – Dendi
Нет INotifyPropertyChanged не помогло, но я нашел проблему .. В моем коде я добавлять новые элементы в SimpleList из JSon файла: SimpleList = JsonConvert.DeserializeObject> (текст, новые JsonSerializerSettings {TypeNameHandling = TypeNameHandling.Auto }); Как это не работает, и если я добавлю еще один элемент из метода ADD кода, также этот элемент не отображается в listview. Но если я создаю другой список: TempList, к которому я десериализую свой json-файл, а после, через foreach из TempList, я добавляю все элементы в свой SimpleList, он работает! :) –
Dendi