我正在尝试在WPF中实现一个Button,它使用Ninject来获取命令对象,该部分工作正常。当第一次实例化这个按钮时,一切都完美无瑕。但是,此类型的任何后续活动都会导致以下问题:
internal class MyButton : Button
{
public MyButton()
{
SetOverrides();
}
public void SetOverrides()
{
var controller = App.kernel.Get<ICommand>("SomeCommand");
Button.CommandProperty.OverrideMetadata(typeof(MyButton),
new FrameworkPropertyMetadata
{
DefaultValue = controller
}
);
Button.CommandParameterProperty.OverrideMetadata(typeof(MyButton),
new FrameworkPropertyMetadata()
{
DefaultValue = Tag
}
);
}
}
问题: 我看到的错误是:&#34; PropertyMetadata已经注册了类型&#39; MyButton&#39;。&#34;
原因: 由于应用程序中存在多个这些按钮,因此不止一次调用CTOR。
我的选择是:
如果我将此代码移到app.cs文件中,那么我对这行代码有疑问,因为值TAG未包含在app.cs类中。如果我知道如何使这段代码说&#34;绑定到任何按钮实例的标签属性我就拥有它,但我不知道如何做到这一点。我也不知道在App.cs注册这个是不是一件好事。
Button.CommandParameterProperty.OverrideMetadata(typeof(MyButton),
new FrameworkPropertyMetadata()
{
DefaultValue = Tag
}
);
请告知..
答案 0 :(得分:0)
我过度思考这一切,因为这是最终解决方案:
internal class MyButton : Button
{
public MyButton()
{
this.Loaded += MyButton_Loaded;
}
private void MyButton_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
if (!App.IsInDesignMode)
{
var controller = App.kernel.Get<ICommand>("SomeCommand");
this.CommandParameter = Tag;
this.Command = controller;
}
}
}
哇!感谢大家帮忙...