【问题标题】:Silverlight 4 MVVM: Unable to Databind ICommandSilverlight 4 MVVM:无法数据绑定 ICommand
【发布时间】:2011-04-16 21:07:33
【问题描述】:

我创建了一个 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>

后面的代码将依赖属性“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 和 ViewModel 定义了我希望 OKCommand 绑定到的命令。 XAML 标记是这样的:

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

但是,当我单击按钮时,它不会执行任何操作。关于我在这里做错的任何线索。

【问题讨论】:

  • 您是否在命令代码中设置了断点以查看代码执行是否成功?

标签: silverlight data-binding mvvm silverlight-4.0


【解决方案1】:

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


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

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 元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2013-08-05
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多