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

标签 wpf xaml windows-phone-7 data-binding mvvm

请帮我理解。我有意见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/

相关文章:

c# - 使用存储过程 C# 的结果填充列表框

wpf - 从Freezable派生的WPF对象如何在XAML中卡住?

.net - WPF 图像 UriSource、数据绑定(bind)和缓存

wpf - 如何为 ItemsControl 中的项目添加边框?

c# - 在 WP7 中将 List<T> 转换为 ObservableCollection<T>

c# - 在 ListView 中注册双击一行

wpf - 将 ObservableCollection 绑定(bind)到 WPF ListBox

c# - RibbonGallery 项目命令单击

windows-phone-7 - 如何在Windows Phone 8的堆栈面板中将一个组件左对齐,另一个组件右对齐

c# - 将 JSON 数组反序列化为强类型 .NET 对象