我有一个问题。
我创建了一个我在我的应用程序中使用的通用容器。 此容器导出两个属性(暂时):其内容和按钮操作。
问题在于我无法绑定操作。
通用容器有一个按钮:
<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'”
有什么想法吗?
谢谢。 弗朗西斯
答案 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;
}