Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将属性绑定到WPF中的仅getter CLR属性?_Wpf_C# 4.0_Dependency Properties - Fatal编程技术网

如何将属性绑定到WPF中的仅getter CLR属性?

如何将属性绑定到WPF中的仅getter CLR属性?,wpf,c#-4.0,dependency-properties,Wpf,C# 4.0,Dependency Properties,出于某种目的,我想在多行文本框的LineCount发生更改时引发一个事件 我认为如果我将依赖项属性绑定到TextBox.LineCount 下面是代码示例 XAML <local:MyTextBox Margin="5,65,5,5" x:Name="txtBox" AcceptsReturn="True" AcceptsTab="False" MyProperty="{Binding LineCount, RelativeSource={RelativeS

出于某种目的,我想在多行文本框的
LineCount
发生更改时引发一个事件
我认为如果我将依赖项属性绑定到
TextBox.LineCount

下面是代码示例

XAML

<local:MyTextBox Margin="5,65,5,5" x:Name="txtBox" 
       AcceptsReturn="True" AcceptsTab="False" 
       MyProperty="{Binding LineCount, RelativeSource={RelativeSource Self}}" />
消息框仅在加载表单时显示,而不是在行数更改后显示。
但是如果我将
MyProperty
的绑定从TextBox的
LineCount
更改为
Text
每次文本更改时都会触发PropertyChangedEvent。

我确信我可以从TextChanged eventhandler触发一些自定义的LineCount changed事件,但我想通过
DependencProperties
来实现这一点,因为我相信这样会更有效。

问题是
LineCount
不是依赖属性,请参阅。因此,它不支持绑定,也不会提供更改通知


考虑到您正在制作一个自定义控件,您真的需要使用绑定吗?为什么不在内部处理
TextChanged
事件,并手动检测行数何时更改。

您不能绑定到任何属性吗?我认为唯一的目标必须是DP。
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()); })
        ));
}