моя модель внутри общего проекта
class model
{
public string title;
public string link;
public string pubDate;
public string description;
public string imageLink;
}
и моя модель просмотра внутри общего проекта
'class viewModel: INotifyPropertyChanged {public ObservableCollection _posts {get; set; задавать; } }
public ObservableCollection<model> posts {
get {
return _posts ;
}
set
{
_posts = value;
RaisePropertyChanged("posts");
}
}
public viewModel()
{
posts = new ObservableCollection<model>
{
new model { title="tiltle", description="description", link="link1" },
new model { title="tiltle2", description="description2", link="link1" },
new model { title="tiltle3", description="description3", link="link1" },
new model { title="tiltle4", description="description4", link="link1" },
new model { title="tiltle5", description="description5", link="link1" },
};
}
public void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
}
public event PropertyChangedEventHandler PropertyChanged;
}'
мой xaml
<ListBox x:Name="listBoxControl" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel>
<TextBlock Text="{Binding Path=title}" />
<TextBlock Text="{Binding Path=description}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
мой xaml.cs
public MainPage()
{
this.InitializeComponent();
this.DataContext = new viewModel();
listBoxControl.DataContext = new viewModel().posts;
}
это мой первый вопрос, у меня проблема с реализацией mvvm. но я хорошо понимаю об этом, когда я бегу, я ничего не видел
Все в порядке, за исключением того, что вы должны использовать свойства с геттерами в своей model
тогда вы увидите что-то.
так:
class model
{
public string title {get;set;}
public string link {get;set;}
//etc..
}
потому что привязка данных работает с полями "Свойства не".
на стороне примечание: вам не нужно называть ваш ListBox
или устанавливать его DataContext
из кода позади, вы уже установили DataContext
вашего представления в свою ViewModel
, так что вы можете просто привязать свой ItemSouce напрямую, например:
<ListBox ItemsSource="{Binding posts}">
хотя способ, которым вы это сделали, будет работать нормально.
также не забудьте реализовать INotifyPropertyChanged
в вашей model
если значения свойств меняются после инициализации.