第一次尝试MVVM,寻找明确放置代码的位置.
我的主视图需要绑定到一个包含1到多个UserControls的列表.
列表是否存在于ViewModel或Model中?从我正在阅读的内容来看,模型通常包含View通过ViewModel绑定的属性.我没有看到它如何工作,模型不需要知道UserControls列表是一个View(UserControl)的列表,我可能会比需要更难,但我仍然包装我的想法应放在代码的位置,我想了解它.感谢您提供任何指导,或者如果我没有自我解释,请告诉我.
你UserControls应该有一个ViewModel(我们ItemViewModel现在就调用它).
你的MainViewModel应该有一个ObservableCollection<ItemViewModel>.
那么你的视图应该有一个ItemsControl(或其衍生物之一ListBox),ItemsSource属性将绑定到该视图ObservableCollection.然后ItemsControl应该定义一个ItemTemplate包含你的UserControl.
这是使用WPF/MVVM进行描述的正确方法.
示例(伪代码):
MainViewModel:
public class MainViewModel
{
public ObservableCollection<ItemViewModel> Items {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
的MainView:
<Window>
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<my:UserControl/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
Run Code Online (Sandbox Code Playgroud)
请记住,每个实例都UserControl将其DataContext设置为源集合中的相应项.
因此,如果您的ItemsViewModel看起来像这样:
public class ItemsViewModel
{
public string LastName {get;set;}
public string FirstName {get;set;}
//INotifyPropertyChanged, etc.
}
Run Code Online (Sandbox Code Playgroud)
你的UserControl定义如下:
<UserControl>
<StackPanel>
<TextBox Text="{Binding LastName}"/>
<TextBox Text="{Binding FirstName}"/>
</StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |