3

第一次尝试 MVVM,想弄清楚在哪里放置一些代码。

我的主视图需要绑定到一个包含 1 到多个 UserControl 的列表。

列表是否存在于 ViewModel 或模型中?从我正在阅读的内容来看,该模型通常包含 View 通过 ViewModel 绑定到的属性。我不知道这将如何起作用,模型不需要知道作为 View(UserControl) 列表的 UserControls 列表,我可能比需要的更难,但我仍在包装我的想法是代码应该放在哪里,我想理解它。感谢您的任何指导,或者如果我没有很好地解释自己,请告诉我。

4

2 回答 2

7

UserControls应该有一个 ViewModel (让我们ItemViewModel现在调用它)。

您的 MainViewModel 应该有一个ObservableCollection<ItemViewModel>.

然后,您的视图应该有一个ItemsControl(或其派生类之一,例如ListBox),其ItemsSource属性将绑定到ObservableCollection. 然后ItemsControl应该定义一个ItemTemplate包含你的UserControl.

这是使用 WPF / MVVM 进行描述的正确方法。

示例(伪代码):

主视图模型:

public class MainViewModel
{
    public ObservableCollection<ItemViewModel> Items {get;set;}
}

主视图:

<Window>
   <ItemsControl ItemsSource="{Binding Items}">
       <ItemsControl.ItemTemplate>
          <DataTemplate>
             <my:UserControl/>
          </DataTemplate>
       </ItemsControl.ItemTemplate>
   </ItemsControl>
</Window>

请记住,每个实例UserControl都会将其DataContext设置为源集合中的相应项。

因此,如果您的 ItemsViewModel 看起来像这样:

public class ItemsViewModel
{
    public string LastName {get;set;} 
    public string FirstName {get;set;} 
    //INotifyPropertyChanged, etc.
}

UserControl可以这样定义:

<UserControl>
   <StackPanel>
      <TextBox Text="{Binding LastName}"/>
      <TextBox Text="{Binding FirstName}"/>
   </StackPanel>
</UserControl>
于 2013-06-19T17:54:09.367 回答
2

您不需要用户控件列表。您可能拥有的是将 View 绑定到 ViewModel 中的项目列表。例如,创建一个 ListBox 并将它的 ItemsSource 设置为您的 ViewModel 的列表。

要为每个项目创建一个用户控件,您需要为列表中的类型创建一个 DataTemplate 并指定您的 UserControl,您可以将该用户控件内的任何绑定提供给该项目。

然后 ListBox 将使用 DataTemplate 为列表中的每个项目创建一个 UserControl。

于 2013-06-19T17:49:58.227 回答