0

MyMetaData と MyData を含むクラス MyDataCollection があります。私のアプリケーションには、入力フィールドをユーザーに表示する2つのユーザーコントロールがあります。1 つは MyMetaData 用で、もう 1 つは MyData 用です。どちらのユーザー コントロールも MainPage に含まれています。

私の質問は次のとおりです:ユーザーコントロールからデータを取得するにはどうすればよいですか?ユーザーは(メインページにある)保存ボタンをクリックしますか?

更新 ブラインドメイの投稿に応じてコードを変更しましたが、MetaDataView が表示されなくなりました。

<UserControl.Resources>
    <DataTemplate x:Key="MetaDataTemplate">
        <view:MetaDataView/>
    </DataTemplate>
</UserControl.Resources>

<Grid>
    <ContentPresenter Content="{Binding MetaDataTemplate}"/>
</Grid>
4

6 に答える 6

4

この質問に としてタグを付けたのでMVVM、ViewModelにはSaveCommand、実際の保存を実行するために必要なデータとすべてのデータの両方が含まれている必要があります。

およびプロパティ (それぞれの にバインドされている) を含めるMainViewModel必要があり、これらの各オブジェクトには、 で必要なデータのプロパティを含める必要があります。たとえば、 forがある場合、データ オブジェクトにはのバインド先のプロパティが必要です。MyMetaDataMyDataUserControlsUserControlUserControlTextBoxNameNameTextBox

[保存] ボタンがそれらのいずれかにあるUserControls場合、それぞれの ViewModelには、クリックSaveCommandされたときに実行される が必要です。Buttonに必要なすべてのデータSaveもその ViewModel にあるので、準備は完了です。

データの保存を担当している場合MainViewModelは、サブ ViewModel にフックして、次SaveCommandのような独自のメソッドをアタッチできる必要があります。

this.MyData.SaveCommand = this.SaveCommand();

保存に必要なすべてのデータは、this.MyData

SaveButtonが UserControls ではなく にある場合MainView、SaveCommand は の一部であるMainViewModel必要があり、保存に必要なすべてのデータはthis.MyDataまたはにありThis.MyMetaDataます。

MVVM では、ViewModel がアプリケーションであることを忘れないでください。View は、ユーザーが ViewModel とやり取りできるようにする単なるインターフェイスです。

于 2012-07-11T13:08:43.453 に答える
0

私は今2つの解決策があります:

意見:

<ContentPresenter Content="{Binding MyMetaDataView}" />

ビューモデル:

public MetaDataViewModel MyMetaDataViewModel { get; set; }
public MetaDataView MyMetaDataView { get; set; }

public MainViewModel()
{
    MyMetaDataViewModel = new MetaDataViewModel();
    MyMetaDataView = new MetaDataView();

    MyMetaDataView.DataContext = MyMetaDataViewModel;
}

また - -

意見:

<UserControl.Resources>
    <DataTemplate  x:Key="MetaDataViewTemplate">
        <view:MetaDataView />
    </DataTemplate>
</UserControl.Resources>
...
<ContentPresenter Content="{Binding MyMetaDataViewModel}" ContentTemplate="{StaticResource MetaDataViewTemplate}"/>

ビューモデル:

public MetaDataViewModel MyMetaDataViewModel { get; set; }

public MainViewModel()
{
    MyMetaDataViewModel = new MetaDataViewModel();
}
于 2012-07-12T14:09:09.223 に答える