为什么不以简单的方式做 mvvm?(首先是视图模型)。你说你有一个主页——这意味着你也有一个主页视图模型。您的 mainpageviewmodel 至少处理保存命令。现在你想在你的主页上显示 MyMetaData 和 MyData。所以最简单的方法是在主视图模型中创建一个 MyMetaData 实例和一个 MyData 实例。
public class MainPageViewmodel
{
public ICommand SaveCommand { get; set; }
public MyDataViewmodel MyData { get; set; }
public MyMetaDataViewmodel MyMetaData { get; set; }
public MainPageViewmodel()
{
this.MyData = new MyDataViewmodel();
this.MyMetaData = new MyMetaDataViewmodel();
}
}
public class MyDataViewmodel
{}
public class MyMetaDataViewmodel
{}
您的主页只需要 2 个数据模板和 2 个内容演示器。
//资源
<DataTemplate DataType="{x:Type Local:MyDataViewmodel}">
<view:MyDataUserControl/>
</DataTemplate>
<DataTemplate DataType="{x:Type Local:MyMetaDataViewmodel}">
<view:MyMetaDataUserControl/>
</DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ContentPresenter Content="{Binding MyData}" Grid.Column="0"/>
<ContentPresenter Content="{Binding MyMetaData}" Grid.Column="1"/>
<Button Content="Save" Command="{Binding SaveCommand}" Grid.Column="2"/>
</Grid>
因为您的 mainpageviewmodel 具有两个“子”视图模型,所以您在 savecommand 上拥有所需的所有信息。
如果您有其他情况,请更新您的问题,也许发布一些代码。
编辑:我没有silverlight,所以只是一个建议:也许雷切尔可以给你一个更好的答案。
<Grid>
<ContentPresenter Content="{Binding MyMetaData}" ContentTemplate="{StaticResource MetaDataTemplate}"/>
</Grid>
如果 silverlight 无法处理数据类型的数据模板,您可以直接将用户控件放在那里。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<view:MyDataUserControl DataContext="{Binding MyData}" Grid.Column="0"/>
<view:MyMetaDataUserControl DataContext="{Binding MyMetaData}" Grid.Column="1"/>
<Button Content="Save" Command="{Binding SaveCommand}" Grid.Column="2"/>
</Grid>