Я пытаюсь понять MVVM и испытываю затруднения с получением моего списка, чтобы показать элементы из наблюдаемой коллекции. У меня нет проблем с получением JSON в классах, которые я настроил, но с чтением xaml привязка не работает. Я не совсем ясно, как настроить это, чтобы иметь возможность читать свойства из data2. Может кто-нибудь указать мне, что я делаю неправильно?
Из reddit мне нужно получить каждый Base.Data.Children.data.title. 0-24 детей, поэтому я должен получить 24 названия.
Модель
public class Child : BindableBase
{
public string kind { get; set; }
public Data2 data { get; set; }
}
public class Data2 : BindableBase
{
public string title { get; set; }
}
public class Posts : ViewModelBase
{
public string kind { get; set; }
public Data data { get; set; }
internal static Task<Posts> GetFileFromApplicationUriAsync(Uri uri)
{
throw new NotImplementedException();
}
}
View
<ScrollViewer x:Name="PostsScrollViewer" HorizontalScrollBarVisibility="Hidden"
Height="Auto" Width="Auto">
<ListView x:Name="PostListBox" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Children}" SelectedItem="{Binding Children}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Children.Data.title}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollViewer>
ViewModel
ViewModelBase
public abstract class ViewModelBase : INotifyPropertyChanged
{
#region Property Changed Event Handler
public void SetPropertyChanged(string propertyName)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion Property Changed Event Handler
}
PostViewModel
public class PostsViewModel : ViewModelBase
{
private ObservableCollection<Child> children = new ObservableCollection<Child>();
private ObservableCollection<Data2> data = new ObservableCollection<Data2>();
private string title;
#region Constructor
public PostsViewModel()
{
GetFrontPagePostsAsync();
}
#endregion Constructor
#region Properties
#region Children
public ObservableCollection<Child> Children
{
get { return this.children; }
set
{
if (value != this.children)
this.children = value;
this.SetPropertyChanged("Children");
}
}
#endregion Children
#endregion Properties
public async void GetFrontPagePostsAsync()
{
using (var client = new HttpClient())
{
try
{
string content = await client.GetStringAsync("http://www.reddit.com/.json");
Posts posts = JsonConvert.DeserializeObject<Posts>(content);
foreach (var i in posts.data.children)
{
children.Add(i);
}
}
catch (Exception e) {
Console.WriteLine(e); }
}
}
}