我有一个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/

10-13 05:20