MVVM

2009-06-29 4 views
1

私は、ユーザーが見ているときと同じように、私は既存のコードに更新する機能を追加したいhttp://msdn.microsoft.com/en-us/magazine/dd419663.aspx でジョシュ・スミスによって作成されたサンプルを使用してMVVM

をMVVMを学んでいます「All Customers」ユーザーのグリッド上のデータは、ダブルクリックすることで特定のレコードを編集できます。ダブルクリックすると、新しいタブ(新規顧客に使用される同じビュー/ビューモデル)が開きます。私はそれをどうやって行うか考えていない、私はmainwindowviewmodelを通してそれを呼び出さなければならないのか、それとも別の方法がある。

あなたがする必要がある最初の事ができるようにすることです:

はそれはとても者は、一度に一つのこと、それをみましょう、少し関わっだすべてと幸せが

GAURAV女子

答えて

1

プログラミングありがとうございましたどのモデルが選択されているかをモデルで確認できます。 これを行うには、お客様にIsSelectedプロパティを追加する必要があります

public bool IsSelected { get; set; } 

(編集:私に指摘したように、CustomerViewModelクラスは、既にこのプロパティを持っているので、上記のために必要ではありませんその特定のプロジェクト - 一般的ですが)

次に、ListViewの項目にIsSelectedプロパティをデータバインドする必要があります。これを行うための1つの方法は、顧客を対象とするスタイルによるものです。このような何か:

<Style x:Key="CustomerListStyle" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" /> 
</Style> 

のListViewのItemContainerStyle使用してこのスタイルを割り当てるその後:選択した顧客を編集できるようにするに

<ListView ItemContainerStyle="{StaticResource CustomerListStyle}" ...> 

を、あなたはAllCustomersViewModelにEditCostumerコマンドを追加する必要があります。 RelayCommandを使用してこのコマンドを実装すると、選択した項目の編集ビューが表示されます。

LINQを使用してIsSelected == trueの顧客を見つけることができます。

+0

こんにちはマーク、 ありがとう、あなたのポストと申し訳ありません私はコメントで書いている、他の方法は、stackoverflowの返信に見つかりませんでした。 'workspace'を静的に宣言し、customerviewmodelで新しいコマンドを作成して新しいワークスペースを作成し、mainwindowviewmododelワークスペースに追加することはOKだと思いますか?その方法はisselectedを実装する必要はありません。いくつかのエキスパート入力をしたいだけです ありがとう Gj – Gaurav

+0

一般に、私はテスト容易性、柔軟性、および一般的なOO-nessを傷つける傾向があるので、できるだけ静的なものから遠ざかります。 ViewModelsの全体的なポイントは、ビューをモデル化することです。モデルのインスタンスがない場合は、ビューごとに1つのモデルを持つことはできません。とにかく1つのワークスペースしか存在しない場合もありますが、静的な使用はMVVMの背後にあるすべての哲学に反すると言います。私の推論はちょっとあいまいですが、それは何年もの経験に基づく一般的な考慮事項です。 –

+1

Mark。私があなたの返信で見る唯一の問題は、顧客モデルにIsSelectedプロパティを置くことを推奨することです。私はそれがGUI指向のプロパティであり、顧客モデルオブジェクトは本当に何が選択されているという概念がないので、CustomerViewModelクラスに入るべきだと思います。 –