我有一个MyDataCollection类,其中包含MyMetaData和MyData。在我的应用程序中,我有两个usercontroll,它们向用户显示输入字段。一个用于MyMetaData,另一个用于MyData。这两个用户控件都包含在MainPage中。
我的问题是:我应该如何从用户控件中获取数据,然后用户轻按保存按钮(位于主页上)?
更新
我已经将我的代码相应地更改为blindmeis发布,但是现在未显示MetaDataView:
<UserControl.Resources>
<DataTemplate x:Key="MetaDataTemplate">
<view:MetaDataView/>
</DataTemplate>
</UserControl.Resources>
<Grid>
<ContentPresenter Content="{Binding MetaDataTemplate}"/>
</Grid>
最佳答案
为什么不以简单的方式执行mvvm?(首先是viewmodel)。您说您有一个主页-这意味着您也有一个mainpageviewmodel。您的mainpageviewmodel至少处理save命令。现在您要在主页上显示MyMetaData和MyData。因此,简单的方法是在您的mainviewmodel中创建一个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个contentpresenter。
//资源
<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具有“子” View 模型,所以您在savecommand上具有所需的所有信息。
如果您还有其他情况,请更新您的问题,也许发布一些代码。
编辑:我没有任何建议,所以只是一个建议:也许瑞秋可以给你一个更好的答案。
<Grid>
<ContentPresenter Content="{Binding MyMetaData}" ContentTemplate="{StaticResource MetaDataTemplate}"/>
</Grid>
如果Silverlight无法处理具有数据类型的数据模板,则可以直接将usercontrol放在那里。
<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>
关于c# - MVVM Light : How to get data from usercontrols?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11431905/