2016-11-19 11 views
0

私はWPFとMVVMを初めて使用しており、Microsoft's siteの例を調べていますが、バインディングの仕組みはわかりません。どうやら関数バインディングnormative

public partial class MainPage : UserControl 
{ 
    private PartInventoryViewModel viewModel; 

    public MainPage() 
    { 
     InitializeComponent(); 
     viewModel = new PartInventoryViewModel(); 
     this.DataContext = viewModel; 
    } 

    private void PartSearchButton_Click(object sender, RoutedEventArgs e) 
    { 
     viewModel.GetParts(); 
    } 
} 

:ユーザーがPartSearchButtonをクリックしたときに

それはViewModelにインスタンスに通知リンクされている例では、コードのこの作品があります。

どのようにですか?この例のPartSearchButtonのXAMLにはバインディングはありません。ボタンをクリックしたときにあなたの関数YourButtonName_Clicked()に名前をつけると、それがトリガーされるというのは規範ですか?または、(object sender, RoutedEventArgs e)引数を指定して関数を作成すると、それはリスナーになりますか?または、このチュートリアルで表示されないXAMLがありますか?バインドはどこにありますか?

あなたの答えをありがとう、それは新品の場合はごめんなさい。

答えて

0

マイクロソフトでは、ここで必要なコードをすべて表示していません。基本的にこのコードでは、DataContextを新しくインスタンス化されたViewModelに設定しています。

:全体の結合の事はあなたのXAMLファイルにデータグリッドのこれらの2行で起こっている

<Button Click="PartSearchButton_Click">Search</Button> 

PartSearchButton_Clickは、単純なクリック・イベント・ハンドラあなたのXAMLファイルではこのようになっているはずです

ItemsSource="{Binding Parts}" 
SelectedItem="{Binding CurrentPart, Mode=TwoWay}" 

これはDataGridに、現在のDataContextでPartsというパブリックプロパティを探すべきであることを伝えています。 DataContextをPartInventoryViewModelの新しいインスタンスに設定するので、パブリックプロパティPartsがそこにある必要があります。私は、PartInventoryViewModelクラスがMicrosoftのサイトでもう少し詳しく説明されると思います。

0

リンクからのXAMLスニペットには、そのイベントハンドラーが実質的に存在しません。

ガイドラインはイベントハンドラの命名規則ですが、決して対応するイベントに自動的にバインドされるわけではありません。プログラムでもXAMLでもハンドラを追加する必要があります。つまり、アプリケーションロジックをボタンに関連付けるのは、通常、イベントハンドラではなくコマンドを使用してWPFで行います。ビューモデルは、タイプICommandのプロパティを公開し、ビューはButton(または他のコントロール)のCommand依存プロパティをバインドします。フードの下でそのコマンドがどのように実装されているかは、ビューとは完全に無関係です。

関連する問題