Silverlight:通用组件的绑定命令

时间:2012-03-29 15:55:06

标签: silverlight mvvm

我有一个问题。

我创建了一个我在我的应用程序中使用的通用容器。 此容器导出两个属性(暂时):其内容和按钮操作。

问题在于我无法绑定操作。

通用容器有一个按钮:

<HyperlinkButton x:Name="expandButton" Width="16">

在后面的代码中我导出了一个ICommand属性:

public ICommand ExpandCommand 
        {
            get { return Click.GetCommand(expandButton); }
            set { Click.SetCommand(expandButton, value); }
        }

而且,当我试图使用它时:

<abo:DashBoardPanel Margin="10" Grid.Row="1" Title="Command Panel"
                                    DataContext="{Binding Commands}"
                                    ExpandCommand="{Binding test}"
                                    >

当分配组件(使用通用容器的组件)时,会触发以下异常:

  

{System.ArgumentException:Un oggetto di tipo   'System.Windows.Data.Binding'nonpuòessereconvertito nel tipo   'System.Windows.Input.ICommand'。苏   System.RuntimeType.TryChangeType(对象值,Binder活页夹,   CultureInfo culture,Boolean needsSpecialCast)su   System.RuntimeType.CheckValue(对象值,Binder活页夹,CultureInfo   culture,BindingFlags invokeAttr)su   System.Reflection.MethodBase.CheckArguments(Object []参数,   Binder binder,BindingFlags invokeAttr,CultureInfo culture,Signature   sig)su System.Reflection.RuntimeMethodInfo.Invoke(Object obj,   BindingFlags invokeAttr,Binder binder,Object []参数,   CultureInfo culture,Boolean skipVisibilityChecks)su   System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags   invokeAttr,Binder binder,Object []参数,CultureInfo文化)
  su System.Reflection.RuntimePropertyInfo.SetValue(Object obj,Object   value,BindingFlags invokeAttr,Binder binder,Object [] index,   文化信息文化)su   System.Reflection.RuntimePropertyInfo.SetValue(Object obj,Object   value,Object [] index)su   MS.Internal.XamlMemberInfo.SetValue(对象目标,对象值)su   MS.Internal.XamlManagedRuntimeRPInvokes.SetValue(XamlTypeToken inType,   XamlQualifiedObject&安培; inObj,XamlPropertyToken inProperty,   XamlQualifiedObject&安培; inValue)}

(它是意大利语..翻译类似于“类型'System.Windows.Data.Binding'的对象无法转换为'System.Windows.Input.ICommand'”

有什么想法吗?

谢谢。 弗朗西斯

1 个答案:

答案 0 :(得分:2)

我认为ExpandCommand需要是一个依赖属性才能绑定到它。至少从你所展示的内容来看,这是我开始编辑的第一个地方。

ExpandCommand在您的泛型类中看起来像这样:

      public static readonly DependencyProperty ExpandCommandProperty =
       DependencyProperty.Register(
       "ExpandCommand",
       typeof(ICommand),
       typeof(genericobject),
       new PropertyMetadata(OnExpandCommandChanged));

    public ICommand ExpandCommand
    {
        get
        {
            return (ICommand)this.GetValue(ExpandCommandProperty);
        }
        set
        {
            this.SetValue(ExpandCommandProperty, value);
        }
    }
    private static void OnExpandCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        genericobject picker = (genericobject)d;
        if (picker == null)
            return;

    }