gpt4 book ai didi

c# - MVVM Light : How to get data from usercontrols?

转载 作者:行者123 更新时间:2023-12-03 10:52:11 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com