如何在Silverlight中将数据传递给用户控件的视图模型?

如何在Silverlight中将数据传递给用户控件的视图模型?,silverlight,silverlight-5.0,Silverlight,Silverlight 5.0,我有一个块对象列表。每个区块都有名称和价格。以及其他在这里不重要的属性 第1座-10英镑 第2座-20英镑 我已经实现了一个显示块的用户控件 此控件有自己的视图模型,我将视图绑定到该模型。例如,我有一个标签,上面有Content=“{Binding Name}” 我有一个单独的视图,其中包含一个堆栈面板。这将由多个块控件填充 如何将块列表中的每个块传递到用户控件的视图模型中 Paul为堆栈面板视图创建视图模型。在此视图模型中显示块视图模型的集合 将此集合绑定到视图中堆栈面板内的ItemsCont

我有一个块对象列表。每个区块都有名称和价格。以及其他在这里不重要的属性

第1座-10英镑
第2座-20英镑

我已经实现了一个显示块的用户控件

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

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

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


Paul

为堆栈面板视图创建视图模型。在此视图模型中显示块视图模型的集合

将此集合绑定到视图中堆栈面板内的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 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 BlockViewModel
{
    public Block CurrentBlock
    {
        get;
        set;
    }
}
块视图模型:

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


对不起,我真的不明白这一点?你能发布一个小代码片段吗?我了解事物的控制方面。我在ViewModels列表中苦苦挣扎。我想把代码放在这里,但每次我按下回车键,它就会发表评论!我已经创建了3个块对象。然后我循环浏览了这些,创建了3个视图模型,并将它们添加到我的列表中。当我尝试这个,我没有得到任何显示。我的控件中XAML的正确语法是什么?另外,我假设我不需要设置DataContext?很抱歉,这是我绑定的错误。在堆栈面板的视图模型中创建视图模型列表时,我假设创建新的视图模型并将视图模型的特性设置为当前块是正确的?有没有更好的方法用更少的代码来实现这一点?我添加了一些示例代码来澄清问题。至于模型和视图模型的创建,这可能是一个单独的主题。我们使用Unity创建视图模型。由于WCF请求,我们的模型通常来自服务器。