2012-08-15 59 views
1

我有一个Block对象列表。每个区块都有一个名称和一个价格。随着这里如何在Silverlight中传递数据以查看用户控件的模型?

并不重要块1其它性质 - 10£
块2 - £20

我已经实现,其显示一个块的用户控制。

此控件拥有自己的视图模型,我将视图绑定到该视图。例如。我有一个标签Content="{Binding Name}"

我有一个单独的视图,其中包含一个堆栈面板。这将填补多个块控制。

如何将块列表中的每个块传递给用户控件的视图模型?

Paul

回答

3

为堆叠面板视图创建视图模型。在此视图模型中公开块视图模型的集合。

将此集合绑定到像视图中堆栈面板内的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> 
+0

对不起,我真的不明白这一点?你可以发布一些代码片段吗?我了解ItemsControl的一面。我在ViewModels列表上苦苦挣扎。我想把代码放在这里,但每次按下输入它的帖子评论!我创建了3个块对象。然后,我浏览了这些视图并创建了3个视图模型,并将其添加到我的列表中。当我尝试这个时,我什么也没有显示。在我的控制中,XAML的正确语法是什么?另外,我假设我不需要设置DataContext? – Paul 2012-08-18 13:12:43

+0

对不起,这是我与绑定的错误。当我在堆栈面板的视图模型中创建视图模型列表时,我假设它正确地创建一个新的视图模型,然后将视图模型的属性设置为当前块?有没有更好的方式来用较少的代码来做到这一点? – Paul 2012-08-18 13:23:18

+0

我添加了一些示例代码来澄清事情。至于创建模型和视图模型 - 这可能是一个单独的主题。我们使用Unity来创建我们的视图模型。由于WCF请求,我们的模型通常来自服务器。 – boris 2012-08-21 15:14:53

相关问题