2016-05-10 3 views
0

Я пытаюсь связать список элементов с моим списком, каждый элемент имеет некоторые свойства, но мне нужно связать только следующее свойство: Тип.Связать одно свойство элемента 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); 
} 
+0

Я прочитал приведенные ниже комментарии. Вы должны реализовать INotifyPropertyChanged в SimpleClass, чтобы отразить элементы, добавленные в список, в UI – Archana

+0

Привет, LovetoCode, спасибо за ваш ответ, я знаю, что INotifyPropertyChanged используется для обновления списка при изменении свойства, но в моем случае я добавляю новый элемент, для этого я не использовал INotifyPropertyChanged, но я использовал ObservableCollection <> вместо простого списка <>, я попробую ваш совет, и я дам вам знать, спасибо! – Dendi

+0

Нет INotifyPropertyChanged не помогло, но я нашел проблему .. В моем коде я добавлять новые элементы в SimpleList из JSon файла: SimpleList = JsonConvert.DeserializeObject > (текст, новые JsonSerializerSettings {TypeNameHandling = TypeNameHandling.Auto }); Как это не работает, и если я добавлю еще один элемент из метода ADD кода, также этот элемент не отображается в listview. Но если я создаю другой список: TempList, к которому я десериализую свой json-файл, а после, через foreach из TempList, я добавляю все элементы в свой SimpleList, он работает! :) – Dendi

ответ

0

Вы могли бы попробовал ваш источник как XML и использовать XmlSerializer для отображения объекта класса к источнику

Звонок

var objectType = typeof(DataClass.AssessmentLayoutDataClass); 
        return (DataClass.AssessmentLayoutDataClass)Utilities.XmlFunctions.ObjectFromXMLString(objectType, found.DataElements); 

Метод:

public static object ObjectFromXMLString(Type typeOfObject, string xmlFile) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeOfObject); 
     StringReader rdr = new StringReader(xmlFile); 
     return serializer.Deserialize(rdr); 
    } 
+0

Привет Крис! Спасибо за ваш ответ, закончив писать мой поток, я заметил, что проблема была другой ... Если я добавлю элементы в список в методе конструктора, как в моем примере, это работает, проблема в том, когда я добавляю элементы в run код ... например, когда я нажимаю кнопку в моем списке, я добавляю элемент, но этот элемент не отображается в виде списка ... Я удалял эту тему, но я видел ваш ответ, и я подумал, что это правильно ответить вы до – Dendi

+0

Я нахожу, как только вы ставите свой вопрос, вы найдете ответ или свою находку, это не проблема. Вы решили проблему? –

+0

Это не решит проблему: myListView.Items.Add (новый ChildType() {Prop1 = "", Prop2 = "", Type = ""}); –

Смежные вопросы