Silverlight: команда связывания универсального компонента - PullRequest
0 голосов
/ 29 марта 2012

У меня проблема.

Я создал универсальный контейнер, который я использую в своем приложении.Этот контейнер экспортирует два свойства (на данный момент): его содержимое и действие кнопки.

Проблема в том, что я не могу связать действие.

Универсальный контейнер имеет кнопку:

<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' non può essere convertito nel tipo 'System.Windows.Input.ICommand.su System.RuntimeType.TryChangeType (значение объекта, связыватель связывания, культура CultureInfo, логическое значение needsSpecialCast) su System.RuntimeType.CheckValue (значение объекта, связыватель связывания, культураInfo Culture, invindingAttr BindingFlags)параметры, связыватель Binder, BindingFlags invokeAttr, культура CultureInfo, подпись sig) su System.Reflection.RuntimeMethodInfo.Invoke (объектный объект, BindingFlags invokeAttr, связыватель Binder, параметры Object [], CultureInfo культура, логическое значение skipVisibilityChecks) suInInfoho.hoRun.motion.motion.motion.Time.fotime.MohofotimeMhoho.Time.Time.Time.foTime.homent.motion.motion.time.hoInvoke (Object obj, BindingFlags invokeAttr, Binder Binder, параметры Object [], CultureInfo culture)
su System.Reflection.RuntimePropertyInfo.SetValue (Object obj, Значение объекта, BindingFlags invokeAttr, Binder Binder, Object [] index, CultureInfo culture)) su System.Reflection.RuntimePropertyInfo.SetValue (объект obj, значение объекта, индекс объекта []) su MS.Internal.XamlMemberInfo.SetValue (цель объекта, значение объекта) su MS.Internal.XamlManagedRuntimeRPInvokes.SetValue (XamlTypeToken inType, XamlQualifiedObject & inObj, XamlPropertyToken inProperty, XamlQualifiedObject & inValue)}

.Привязка «не может быть преобразована в« System.Windows.Input.ICommand »)

Есть идеи?

Спасибо.Francesco

1 Ответ

2 голосов
/ 29 марта 2012

Я думаю, что 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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...