mvvm 通用应用程序为什么不挂起
mvvm universal app why it do not pending
我在共享项目中的模型
class model
{
public string title;
public string link;
public string pubDate;
public string description;
public string imageLink;
}
和我在共享项目中的视图模型
`class 视图模型:INotifyPropertyChanged
{
public ObservableCollection _posts { 得到;放; }
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
中使用带有 getter 的属性,然后你会看到一些东西。
所以:
class model
{
public string title {get;set;}
public string link {get;set;}
//etc..
}
因为数据绑定适用于属性而不是字段。
旁注:
您不需要命名您的 ListBox
或从后面的代码中设置它的 DataContext
,您已经将视图的 DataContext
设置为您的 ViewModel
,因此您只需绑定直接添加到您的 ItemsSouce,例如:
<ListBox ItemsSource="{Binding posts}">
即使你这样做的方式也很好。
如果 属性 值在初始化后发生变化,也不要忘记在 model
中实现 INotifyPropertyChanged
。
我在共享项目中的模型
class model
{
public string title;
public string link;
public string pubDate;
public string description;
public string imageLink;
}
和我在共享项目中的视图模型
`class 视图模型:INotifyPropertyChanged { public ObservableCollection _posts { 得到;放; }
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
中使用带有 getter 的属性,然后你会看到一些东西。
所以:
class model
{
public string title {get;set;}
public string link {get;set;}
//etc..
}
因为数据绑定适用于属性而不是字段。
旁注:
您不需要命名您的 ListBox
或从后面的代码中设置它的 DataContext
,您已经将视图的 DataContext
设置为您的 ViewModel
,因此您只需绑定直接添加到您的 ItemsSouce,例如:
<ListBox ItemsSource="{Binding posts}">
即使你这样做的方式也很好。
如果 属性 值在初始化后发生变化,也不要忘记在 model
中实现 INotifyPropertyChanged
。