C# Can';t绑定到自定义控件中的命令
我创建了一个基于文本框的控件,如下所示:C# Can';t绑定到自定义控件中的命令,c#,xaml,uwp,uwp-xaml,C#,Xaml,Uwp,Uwp Xaml,我创建了一个基于文本框的控件,如下所示: public class DelayedTextBox : TextBox { public ICommand DelayedTextChangedCommand { get; set; } } 然后,我使用以下代码创建Foo.xaml: <h:DelayedTextBox DelayedTextChangedCommand="{Binding FooCommand}"/> 我正在使
public class DelayedTextBox : TextBox
{
public ICommand DelayedTextChangedCommand
{
get;
set;
}
}
然后,我使用以下代码创建Foo.xaml:
<h:DelayedTextBox DelayedTextChangedCommand="{Binding FooCommand}"/>
我正在使用GalaSoft.MvvmLight中的RelayCommand,它适用于我项目中的其他命令
运行项目时,加载Foo.xaml时会出现以下错误:
WinRT信息:未能分配给属性
'TestApp.Helpers.DelayedTextBox.DelayedTextChangedCommand'。[第29行
位置:103]类型的异常
TestApp.exe中出现“Windows.UI.Xaml.Markup.XamlParseException”
但未在用户代码WinRT信息中处理:分配失败
财产
'TestApp.Helpers.DelayedTextBox.DelayedTextChangedCommand'。[第29行
位置:103]无法找到与此错误代码关联的文本
找到了
未能分配给属性
'TestApp.Helpers.DelayedTextBox.DelayedTextChangedCommand'。[第29行
职位:103]
我非常困惑它为什么不能正确绑定,我做错了什么?问题是我没有添加@Lynn Crumbling在我问题的评论中提到的dependencProperty 将以下内容添加到DelayedTextBox完成了此任务:
public static readonly DependencyProperty DelayedTextChangedCommandProperty =
DependencyProperty.Register(
"DelayedTextChangedCommand",
typeof(ICommand),
typeof(DelayedTextBox),
new PropertyMetadata(0));
为什么命令是文本框的成员?DelayedTextChangedCommand不是依赖项属性。每次我使用XAML属性设置某个内容时,“某个内容”都是DP。如果用户在文本框中键入内容并在一定延迟时间内停止键入,则DelayedTextBox将调用该命令(如果已设置)。我添加了这个命令,以便将它绑定到我设置的某个命令,然后对文本框text执行操作。我建议查看MVVM模式。理想情况下,您应该分离UI和显示逻辑。该命令应位于viewmodel中,并且xaml的datacontext设置为viewmodel。这将使该命令与用于调用该命令的UI完全解耦。感谢Lynn,添加了dependency属性修复了该问题。不过我不明白你最后的评论。我没有使用MVVM吗?我在视图中添加自定义控件,并将其绑定到视图模型中的某个对象。
public static readonly DependencyProperty DelayedTextChangedCommandProperty =
DependencyProperty.Register(
"DelayedTextChangedCommand",
typeof(ICommand),
typeof(DelayedTextBox),
new PropertyMetadata(0));