我有问题,我有一个现有的模型对象,我无法扩展。实际问题有点复杂,所以我试着将其分解。
我希望使用依赖项属性扩展TextBox
以指示文本已更改。所以我提出了以下解决方案:
public class MyTextField : TextBox
{
public MyTextField()
{
this.TextChanged += new TextChangedEventHandler(MyTextField_TextChanged);
}
private void MyTextField_TextChanged(object sender, TextChangedEventArgs e)
{
IsDirty = true;
}
public static DependencyProperty IsDirtyProperty = DependencyProperty.Register(
"IsDirtyProperty",
typeof(bool),
typeof(MyTextField),
new PropertyMetadata(false));
public bool IsDirty
{
get { return (bool)GetValue(IsDirtyProperty); }
set { SetValue(IsDirtyProperty, value); }
}
}
XAML:
<my:MiaTextField Text="{Binding Barcode}" IsDirty="{Binding IsDirty}"/>
因此,如果我更改TextBox
中的文字,则isDirty
属性应更改为true
。
但我得到了一个System.Windows.Markup.XamlParseException
:绑定只能设置为“DependencyObject”的“DependencyProperty”。
答案 0 :(得分:5)
将{4}&#34;,即依赖属性的CLR包装器的名称传递给DependencyProperty.Register
方法:
public static DependencyProperty IsDirtyProperty = DependencyProperty.Register(
"IsDirty",
typeof(bool),
typeof(MyTextField),
new PropertyMetadata(false));
如果您使用的是C#6 / Visual Studio 2015或更高版本,则可以使用nameof
运算符:
public static DependencyProperty IsDirtyProperty = DependencyProperty.Register(
nameof(IsDirty),
typeof(bool),
typeof(MyTextField),
new PropertyMetadata(false));
答案 1 :(得分:1)
或者你可以override the PropertyMetadata TextProperty:
public class MyTextBox : TextBox
{
static MyTextBox()
{
TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata("", IsDirtyUpdateCallback));
}
private static void IsDirtyUpdateCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is MyTextBox tb && e.NewValue != e.OldValue && e.Property == TextProperty)
{
tb.IsDirty = (string)e.OldValue != (string)e.NewValue;
}
}
public bool IsDirty
{
get { return (bool)GetValue(IsDirtyProperty); }
set { SetValue(IsDirtyProperty, value); }
}
public static readonly DependencyProperty IsDirtyProperty =
DependencyProperty.Register("IsDirty", typeof(bool), typeof(MyTextBox), new PropertyMetadata(true));
}
自动设置你的IsDirty:o)多一种方式到罗马。但是对于你的问题,有点用大炮射击小鸟(德国谚语)