2016-11-19 1 views
0

Ich bin neu bei WPF und MVVM und gehe durch ein Beispiel auf Microsoft's site, aber ich sehe nicht, wie die Bindung erfolgt ist. Im Beispiel verbunden ist, gibt es dieses Stück Code:Funktion bindende 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(); 
    } 
} 

Anscheinend:

Es benachrichtigt das Ansichtsmodell Beispiel, wenn der Benutzer die PartSearchButton klickt.

Aber wie? Im obigen XAML gibt es keine Bindung für das PartSearchButton im Beispiel. Ist es normativ, dass wenn Sie Ihre Funktion YourButtonName_Clicked() benennen, wird sie ausgelöst, wenn auf die Schaltfläche geklickt wird? Oder wird es ein Listener, wenn Sie die Funktion mit den Argumenten (object sender, RoutedEventArgs e) erstellen? Oder gibt es einige XAML, die dieses Tutorial nicht zeigt, wo die Bindung stattfindet?

Vielen Dank für Ihre Antwort, tut mir leid, wenn es eine neue ist.

Antwort

0

Microsoft zeigt nicht den gesamten Code, der hier erforderlich ist. Im Grunde genommen setzt alles, was dieser Code tut, das DataContext auf ein neu instanziiertes ViewModel. Die PartSearchButton_Click sind ein einfacher Click-Ereignis-Handler, die so etwas wie dies in XAML-Datei aussehen sollen:

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

Das gesamte Bindung, was in diesen zwei Zeilen des Datagrid in Ihrer XAML-Datei passiert:

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

Dies teilt dem DataGrid mit, dass es im aktuellen DataContext nach einer öffentlichen Eigenschaft namens Parts suchen soll. Sie setzen den DataContext auf eine neue Instanz von PartInventoryViewModel, also muss dort eine öffentliche Eigenschaft Parts irgendwo da sein. Ich denke, die Klasse PartInventoryViewModel wird auf der Microsofts-Site etwas weiter unten erklärt.

0

Die XAML-Snippets von Ihrem Link fehlen diesen Event-Handler effektiv.

Die <source>_<event> Richtlinie ist die Konvention für die Benennung von Event-Handlern, aber auf keinen Fall wird die Funktion automatisch an das entsprechende Ereignis gebunden; Sie müssen den Handler entweder programmgesteuert oder in XAML hinzufügen.

Das heißt, die Zuweisung von Anwendungslogik zu Schaltflächen erfolgt normalerweise in WPF mit Hilfe von Befehlen anstelle von Event-Handlern. Das Ansichtsmodell zeigt eine Eigenschaft des Typs ICommand an, und die Ansicht bindet die Command Abhängigkeitseigenschaft eines Button (oder anderer Steuerelemente) daran. Wie dieser Befehl unter der Haube implementiert wird, ist für die Ansicht völlig irrelevant.

Verwandte Themen