2010-05-05 24 views
9

yo tengo un control de usuario que contiene un botón y algunos otros controles:UserControls WPF - Establecer la propiedad .Command en el botón de control de usuario en el interior

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

Al crear una nueva instancia de que el control, quiero llegar a la propiedad Comando del botón:

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

por supuesto, la cosa "TheButton.Command" no funciona.

Así que mi pregunta es: Usando XAML, ¿cómo puedo configurar la propiedad .Command del botón dentro de mi control de usuario?

Respuesta

18

Agregue una propiedad de dependencia a su UserControl y enlace la propiedad Command del botón a esa.

Así que en su 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)); 

Y en su XAML de GreatUserControl:

<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> 

lo tanto, su botón se une a la orden en el propio control de usuario. Ahora puede configurarlo en su ventana primaria:

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

Gracias, Matt. Me di cuenta de que en parte podría hacerlo registrando DependencyProperty, pero esperaba que hubiera una manera más fácil (por ejemplo, quizás exponer el botón como propiedad del control) y luego configurarlo en XAML. De todos modos. Esto lo hara. Gracias por la respuesta. –

+3

Esto se rompe cuando agrega un DataContext a su control de usuario. – Nicholas

+10

Paciente: "Duele cuando hago esto". Doctor: "Deja de hacer eso". –

Cuestiones relacionadas