繁体   English   中英

寻找将某些代码放在WPF MVVM应用程序中的指导

[英]Looking for guidance for where to put some code in a WPF MVVM application

第一次尝试MVVM,寻找明确放置代码的位置。

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

列表是否存在于ViewModel或Model中? 从我正在阅读的内容来看,模型通常包含View通过ViewModel绑定的属性。 我没有看到它如何工作,模型不需要知道UserControls列表是一个View(UserControl)的列表,我可能会比需要更难,但我仍然包装我的想法应放在代码的位置,我想了解它。 感谢您提供任何指导,或者如果我没有自我解释,请告诉我。

您的UserControls应该有一个ViewModel(我们现在称之为ItemViewModel )。

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

然后你的视图应该有一个ItemsControl (或其衍生产品,如ListBox ), ItemsSource属性将绑定到ObservableCollection 然后ItemsControl应该定义一个包含UserControlItemTemplate

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

示例(伪代码):

MainViewModel:

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

的MainView:

<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>

您不应该需要UserControl列表。 您可能拥有的是View绑定到ViewModel中的项目列表。 例如,创建一个ListBox并将其ItemsSource设置为ViewModel的列表。

要为每个项创建用户控件,您需要为列表中的类型创建一个DataTemplate并指定UserControl,并且可以将该usercontrol中的任何绑定赋予该项。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM