wpf - 如何将属性绑定(bind)到 WPF 中的仅 getter CLR 属性?

标签 wpf c#-4.0 dependency-properties

出于某种目的,我想在多行文本框的 LineCount 发生变化时引发一个事件
我想如果我将依赖属性绑定(bind)到 TextBox.LineCount 就可以实现此目的
下面是代码示例

XAML

<local:MyTextBox Margin="5,65,5,5" x:Name="txtBox" 
       AcceptsReturn="True" AcceptsTab="False" 
       MyProperty="{Binding LineCount, RelativeSource={RelativeSource Self}}" />

代码隐藏

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        DataContext = this;
    }

    public int MyProperty
    {
        get
        {
            return (int)this.GetValue(LineCountProperty);
        }
        set
        {
            this.SetValue(LineCountProperty, value);
        }
    }

    public static readonly DependencyProperty LineCountProperty =
        DependencyProperty.Register(
        "MyProperty",
        typeof(int),
        typeof(TextBox),
        new FrameworkPropertyMetadata(
            new PropertyChangedCallback(
             (dp, args) => { MessageBox.Show(args.NewValue.ToString()); })
        ));
}

消息框仅在加载表单时显示,而不是在行数更改后显示。
但是,如果我将 MyProperty 的绑定(bind)从 TextBox 的 LineCount 更改为 Text 每次文本更改时都会触发 PropertyChangedEvent。
我确信我可以从 TextChanged 事件处理程序触发一些自定义 LineCount 更改事件,但我想通过 DepedencyProperties 来执行此操作,因为我相信它会更有效。

最佳答案

问题是 LineCount 不是依赖属性,请参阅 MSDN documentation 。因此它不支持绑定(bind)并且不会提供更改通知。

考虑到您正在制作自定义控件,您真的需要使用绑定(bind)吗?为什么不直接在内部处理 TextChanged 事件并手动检测行数何时发生变化。

关于wpf - 如何将属性绑定(bind)到 WPF 中的仅 getter CLR 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112663/

相关文章:

c# - Wpf 在主屏幕中启动

c# - 避免可重用 WPF 控件中的 XAML 资源键冲突

wpf - 在 IValueConverter 类中定义属性

wpf - 为 UserControl 设置 Canvas.Top

wpf - 为什么无法在组合框中选择空值?

c# - 如何在鼠标悬停时创建带有 WPF 边框的淡出过渡效果?

jquery - 无法在ken​​do mvc中使用javascript编辑网格

c# - 来自网页的 Javascript 源代码

c#-4.0 - Nuget Moq 4.0.10827 和 InternalsVisibleTo(再次)

c# - 如何在更新属性时调用代码隐藏中的方法?