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));