【问题标题】:Silverlight: bind command of a generic componentSilverlight:通用组件的绑定命令
【发布时间】:2012-04-13 07:33:04
【问题描述】:

我有问题。

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

问题是我无法绑定动作。

通用容器有一个按钮:

<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' 非 può essere convertito nel tipo 'System.Windows.Input.ICommand'。苏 System.RuntimeType.TryChangeType(对象值,Binder binder, CultureInfo 文化,布尔需要SpecialCast) su System.RuntimeType.CheckValue(对象值,Binder binder,CultureInfo 文化,BindingFlags invokeAttr) su System.Reflection.MethodBase.CheckArguments(Object[] 参数, Binder binder、BindingFlags invokeAttr、CultureInfo 文化、签名 sig) su System.Reflection.RuntimeMethodInfo.Invoke(对象 obj, BindingFlags invokeAttr,Binder binder,Object[]参数, CultureInfo 文化,布尔型 skipVisibilityChecks) su System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr、Binder binder、Object[] 参数、CultureInfo 文化)
su System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象 value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo文化)苏 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象 值,对象 [] 索引)苏 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')

有什么想法吗?

谢谢。 弗朗切斯科

【问题讨论】:

    标签: silverlight mvvm


    【解决方案1】:

    我认为 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;
    
        }
    

    【讨论】:

    • 谢谢。有用!我认为只有当我希望我的 UI 与模型保持更新时,我才需要注册一个依赖属性
    猜你喜欢
    • 2011-04-13
    • 2011-11-29
    • 1970-01-01
    • 2011-03-12
    • 2011-09-24
    • 2011-02-28
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多