2010-05-05 6 views
9

Ich habe ein Usercontrol bekam, die eine Schaltfläche und einige andere Steuerelemente enthält:WPF Usercontrols - die .command Eigenschaft auf Knopf im Usercontrol Einstellung

<UserControl> 
    <StackPanel> 
    <Button x:Name="button" /> 
    ... 
    </StackPanel> 
</UserControl> 

Wenn ich eine neue Instanz dieses Steuerelement zu erstellen, möchte ich Holen Sie sich die Schaltfläche Command-Eigenschaft:

<my:GreatUserControl TheButton.Command="{Binding SomeCommandHere}"> 
</my:GreatUserControl> 

Natürlich funktioniert das "TheButton.Command" Ding nicht.

Also meine Frage ist: Verwenden von XAML, Wie kann ich die .Command Eigenschaft der Schaltfläche in meinem Benutzersteuerelement festlegen?

Antwort

18

Fügen Sie Ihrem UserControl eine Abhängigkeitseigenschaft hinzu und binden Sie die Command-Eigenschaft der Schaltfläche an diese.

Also in Ihrem GreatUserControl:

public ICommand SomeCommand 
{ 
    get { return (ICommand)GetValue(SomeCommandProperty); } 
    set { SetValue(SomeCommandProperty, value); } 
} 

public static readonly DependencyProperty SomeCommandProperty = 
    DependencyProperty.Register("SomeCommand", typeof(ICommand), typeof(GreatUserControl), new UIPropertyMetadata(null)); 

Und in Ihrem GreatUserControl der XAML:

<UserControl 
    x:Class="Whatever.GreatUserControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Name="me" 
    > 
    <Button Command="{Binding SomeCommand,ElementName=me}">Click Me!</Button> 
</UserControl> 

So bindet Ihre Schaltfläche auf den Befehl auf dem Usercontrol selbst. Jetzt können Sie das in Ihrem Elternfenster einstellen:

<my:GreatUserControl SomeCommand="{Binding SomeCommandHere}" /> 
+0

Danke, Matt. Ich erkannte teilweise, dass ich dies tun könnte, indem ich eine DependencyProperty anmeldete, aber ich hoffte, dass es einen einfacheren Weg gab (z. B. den Button als eine Eigenschaft des Steuerelements verfügbar zu machen) und setze ihn dann einfach in XAML. Sowieso. Das wird es tun. Danke für die Antwort. –

+3

Das bricht, wenn Sie Ihrem Benutzersteuerelement einen DataContext hinzufügen. – Nicholas

+10

Patient: "Es tut weh, wenn ich das tue." Doktor: "Hör auf damit." –