为堆叠面板视图创建视图模型。在此视图模型中公开块视图模型的集合。
将此集合绑定到像视图中堆栈面板内的ItemsControl之类的东西。设置模板,以便用户控件用于显示每个项目。
ItemsControl实例化的每个控件都将与您的集合中的元素相关联。这将导致每个用户控件与其自己的视图模型相关联。
更新 - 这里是一些代码
主要页面:
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Vertical">
<ItemsControl ItemsSource="{Binding BlockViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:BlockView></local:BlockView>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
背后的主要页面代码:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
DataContext = new MainPageViewModel();
}
}
主要网页浏览模式:
public class MainPageViewModel
{
public ObservableCollection<BlockViewModel> BlockViewModels
{
get;
private set;
}
public MainPageViewModel()
{
BlockViewModels = new ObservableCollection<BlockViewModel>();
BlockViewModels.Add(new BlockViewModel { CurrentBlock = new Block { Name = "Block 1", Price = 10 } });
BlockViewModels.Add(new BlockViewModel { CurrentBlock = new Block { Name = "Block 2", Price = 20 } });
}
}
模块型号:
public class Block
{
public string Name
{
get;
set;
}
public int Price
{
get;
set;
}
}
块视图模型:
public class BlockViewModel
{
public Block CurrentBlock
{
get;
set;
}
}
块视图:
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding CurrentBlock.Name}"></TextBlock>
<TextBlock Text=" - "></TextBlock>
<TextBlock Text="{Binding CurrentBlock.Price}"></TextBlock>
</StackPanel>
</Grid>
对不起,我真的不明白这一点?你可以发布一些代码片段吗?我了解ItemsControl的一面。我在ViewModels列表上苦苦挣扎。我想把代码放在这里,但每次按下输入它的帖子评论!我创建了3个块对象。然后,我浏览了这些视图并创建了3个视图模型,并将其添加到我的列表中。当我尝试这个时,我什么也没有显示。在我的控制中,XAML的正确语法是什么?另外,我假设我不需要设置DataContext? – Paul 2012-08-18 13:12:43
对不起,这是我与绑定的错误。当我在堆栈面板的视图模型中创建视图模型列表时,我假设它正确地创建一个新的视图模型,然后将视图模型的属性设置为当前块?有没有更好的方式来用较少的代码来做到这一点? – Paul 2012-08-18 13:23:18
我添加了一些示例代码来澄清事情。至于创建模型和视图模型 - 这可能是一个单独的主题。我们使用Unity来创建我们的视图模型。由于WCF请求,我们的模型通常来自服务器。 – boris 2012-08-21 15:14:53