gpt4 book ai didi

wpf - 多个绑定(bind) ViewModel 到 View MVVM

转载 作者:行者123 更新时间:2023-12-03 10:23:27 24 4
gpt4 key购买 nike

请帮我理解。我有意见PanoramaPage.xaml有两个 PanoramaItem .第一项是来自某个 Web 服务的新闻列表,第二项是该服务的用户列表。新闻和用户不同Models .

查看:

<controls:PanoramaItem Header="users">
<ListBox Margin="0,0,-12,0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,17">
<StackPanel Width="311">
<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Aboutself}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</controls:PanoramaItem>
</controls:Panorama>

<controls:PanoramaItem Header="news">
<ListBox Margin="0,0,-12,0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432" Height="78">
<TextBlock Text="{Binding Title}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Content}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</controls:PanoramaItem>

MVVM 下我应该有 两个 ViewModel两个控件新闻 ListBox和用户 ListBox一个 ViewModel对于 一个样本 PanoramaPage.xaml .

PanoramaPageViewModel
public class PanoramaPageViewModel : INotifyPropertyChanged
{
private ObservableCollection<User> userDataSource;
private ObservableCollection<News> newsDataSource;

public ObservableCollection<User> UserDataSource
{
get
{
if (this.userDataSource == null)
{
this.userDataSource = new ObservableCollection<User>();
}
return this.userDataSource;
}
}

public ObservableCollection<News> NewsDataSource
{
get
{
if (this.newsDataSource == null)
{
this.newsDataSource = new ObservableCollection<News>();
}
return this.newsDataSource;
}
}

// LoadUsers(), LoadNews(), etc
}



用户查看型号
public class UsersViewModel : INotifyPropertyChanged
{
private ObservableCollection<User> userDataSource;

public ObservableCollection<User> UserDataSource
{
get
{
if (this.userDataSource == null)
{
this.userDataSource = new ObservableCollection<User>();
}
return this.userDataSource;
}
}
//LoadUsers() etc
}

新闻ViewModel
public class NewsViewModel : INotifyPropertyChanged
{
private ObservableCollection<News> newsDataSource;

public ObservableCollection<News> NewsDataSource
{
get
{
if (this.newsDataSource == null)
{
this.newsDataSource = new ObservableCollection<News>();
}
return this.newsDataSource;
}
}
//LoadNews() etc
}

你怎么看?

最佳答案

单一 View 模型。并非每个 View 控件都有自己的 View 模型。您将 ViewModel 设置为整个 View 的 DataContext。
即使您使用两个 View 模型,您也需要拥有包含这两个 View 模型实例的父 View 模型。这个父 View 模型将作为整个 View 的数据上下文,子控件会将它们的数据上下文设置为这些 subview 模型,因此您还必须更改绑定(bind)。

但是单 View 单 View 模型就是 mvvm 是什么。

谢谢

关于wpf - 多个绑定(bind) ViewModel 到 View MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com