2012-03-05 13 views
2

新規インスタンス化、それが所定の場所にクリックするのですが、私は知識/コンセプトギャップを持っているように見える...はMVVMにViewModelに(阿呆の支援が必要です)

私のメインウィンドウには、項目のリストが表示されます。

<Window.DataContext> 
    <vm:MainWindowViewModel /> 
</Window.DataContext> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="100" /> 
    </Grid.RowDefinitions> 

    <vw:HeaderView Grid.Row="0" /> 

    <vw:RegistersView Grid.Row="1" /> 

    <vw:LogView Grid.Row="2" /> 
</Grid> 

MainWindowViewModelはメインデータリポジトリを作成します。

RegistersViewには、(特に)オブジェクトのListViewがあり、値の編集を行います。私は、またRegistersViewためのViewModelを作成するために非常にMVVM(明白言及していない)と思われるのObservableCollection <を暴露することによってRegistersViewにListViewコントロールにデータを取得する>と

<vw:RegistersView DataContext="{Binding PropertyNameOfCollectionForListView}" Grid.Row="1" /> 

に上記の行を変更することができます。..私は非常に基本的な方法でそれをフックする方法の洞察力が欠けている。 ユニティ、プリズム、他のすべてを使用してIOC/DIを使用することを理解していますが... にはがありますか?本当に私が望むすべてはなど、レジスタ・ビューにモデルと対話するための特定のプロパティを公開してにバインドするコマンドを定義することができることです

私は

<vw:RegistersView viewmodel="RegistersViewModel(PropertyNameOfCollectionForListView)" /> 

できる人のポイントを言いたいように私は感じます私は正しい方向に私をしてください - 私は読んで、読んで、読んだが、私はそれを紛失している。

あなたの忍耐をありがとう; - >

+0

私はあなたができると思います: '

+0

はい私はアイデア - 基本的に私のシンプルな "ビューは、ビューモデルを作成する"仮定は欠陥があった。私は演劇を持っていると戻って報告する!入力いただきありがとうございます。 – AndyC

答えて

0

あなたMainWindowViewModelRegistersViewModel型のプロパティを公開することができ、以下に示すように、あなたは、XAMLでRegisterView.DataContextにバインドすることができます明らかに

<vw:RegistersView Grid.Row="1" 
        DataContext="{Binding RegistersViewModelPropertyName}" /> 

RegistersViewModelPropertyNameに参照する必要がありますすでにインスタンス化されたRegistersViewModelMainViewModelの構築段階か、RegistersViewModelPropertyName getterを怠惰なものとして実装するかは、どのように行うかはあなた次第です。

0

またRegistersView

のためのViewModel を作成するために非常にMVVM(明白に言及しない)ようで、私は完全にこれは非常にMVVMのように感じて、同意するものとします。だから、現在お使いのMainWindowViewModelは、次のようになります。

class MainWindowViewModel 
{ 
    public ObservableCollection<RegisterViewModel> PropertyNameOfCollectionForListView {get; set;} 
} 

なぜそのコマンドと一緒にあなたのUIにさらされている項目のコレクションをカプセル化するビューモデルを作成していません。だから、新しいビューモデルは次のようになります。

public class RegistersViewModel 
{ 
    public ObservableCollection<RegisterViewModel> RegisterViewModelCollection {get; set;} 

    public ICommand AddRegister { get; set; } 

    public ICommand RemoveRegister { get; set; } 
} 

すなわち、それはまだ元のコレクションを公開し、今このコレクションに関連するコマンドが追加されます。

あなたMainWindowViewModel今公開し、この新しいビューモデル:あなたは、このプロパティにユーザーコントロールをバインド

class MainWindowViewModel 
{ 
    public RegistersViewModel RegistersViewModelProperty {get; set;} 
} 

:リストにこのユーザーコントロールのバインドに

とXAML内とコマンド

<UserControl x:Class="RegistersView" ... > 
    <ListView ItemsSource={Binding Path=RegisterViewModelCollection}/> 
    <Button Content="Add" Command="{Binding Path=AddRegister}"/> 
</UserControl> 

いいえ、これはありませんDIやIoCは必要ありません!

+0

そして、私はあなたが言っていることを見ています。 MainWindowBlahは、そのビューとそれが知っているモデルでそれらのビューを作成する方法について知っています。私はこれと一緒に遊ぶ必要があります...誰が睡眠が必要ですか?ガイダンスをありがとう。 – AndyC

関連する問題