Silverlight 4 MVVM:无法数据绑定ICommand

时间:2010-09-24 16:12:47

标签: silverlight data-binding mvvm silverlight-4.0

我创建了一个Silverlight用户控件。标记是:

<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Width="Auto" Margin="5">
    <Button Content="OK" Margin="0,0,5,5" MinWidth="50" Command="{Binding OKCommand}"  />
</StackPanel>

后面的代码将Dependency属性'OKCommand'声明为:

public ICommand OKCommand
{
    get
    {
        return (ICommand)GetValue(OKCommandProperty);
    }
    set
    {
        SetValue(OKCommandProperty, value);
    }
}

public static readonly DependencyProperty OKCommandProperty
    = DependencyProperty.Register("OKCommand", typeof(ICommand), typeof(TestUserControl), new PropertyMetadata(null, OKCommandProperty_PropertyChangedCallback));

private static void  OKCommandProperty_PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{      
}

现在我想在另一个页面上使用用户控件,其中View&amp; ViewModel定义了我希望绑定OKCommand的命令。 XAML标记是这样的:

<local:TestControl OKCommand="{Binding Path=TestControlOk}"/>

然而,当我点击按钮时,它不会执行任何操作。关于我在这里做错了什么的线索。

1 个答案:

答案 0 :(得分:1)

您需要显示包含TestControlOk属性的视图模型,以便我们可以判断这是否是问题的一部分。


UserControls不会自动将自己注册为数据上下文,因此用户控件内的绑定将无法绑定任何内容。你有吗

this.DataContext = this;

UserControl代码隐藏中的任何位置,以使您的第一个绑定实际工作?

或者,您可以这样做:

<UserControl .....
    x:Name="MyUserControl">
    <StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Width="Auto" Margin="5">
        <Button Content="OK" Margin="0,0,5,5" MinWidth="50" 
            Command="{Binding OKCommand, ElementName=MyUserControl}"  />
    </StackPanel>
</UserControl>

注意绑定的ElementName=部分指向XAML中的根UserControl元素。