[英]DependencyProperty.Register textbox in XAML
我正在尝试获取一个文本框来显示加密的数据,并在加密后将所有更改保存回文档中。 这就是我所拥有的:
XAML:
<TextBox Text="{Binding Path=UID, Mode=TwoWay}" Name="txtUID" Width="70"/>
后面的代码:
public DependencyProperty UIDProperty = DependencyProperty.Register("UID", typeof(string), typeof(MainWindow), new FrameworkPropertyMetadata(""));
private string UID
{
get { return Encryption.Decrypt((string)GetValue(UIDProperty)); }
set { SetValue(UIDProperty, Encryption.Encrypt(value)); }
}
问题是当表单加载时,当我更改值时什么也没有发生。 文本框保持空白,并且代码永远不会在我设置为捕获get和set UID的断点处停止。 我做错了什么?
依赖项属性的“ CLR包装器”只能通过代码来调用。 XAML解析器用于DependencyObject.GetValue和DependencyObject.SetValue方法的直接调用。
为了完成您的任务,您可以使用ValueConverter扩展绑定。
查看调试数据绑定 ,如果绑定被破坏,则您至少应该能够检索到绑定错误。
有多种可能的原因,其中之一是DataContext
不是具有该属性的控件。 断点未命中的事实无济于事,CLR属性只是为了您的方便(您不应在其中放置任何自定义代码 ),如果您在代码中不使用它,没人会使用,则绑定系统将使用诸如SetBinding
类的SetBinding
。
属性字符串UDI未被调用,因为它是私有的。 为了使XAML具有访问权限,您需要将其公开。 并且您需要将datacontext设置为后面的代码。
DependencyProperty可能存在问题,但是如果未在UID上调用get和set,那么它就不会那么遥远。 首先尝试不进行加密,至少要调试绑定。
<TextBox Text="{Binding Path=UID, Mode=TwoWay}" Name="txtUID" Width="70"/>
后面的代码:
public DependencyProperty UIDProperty = DependencyProperty.Register("UID", typeof(string), typeof(MainWindow), new FrameworkPropertyMetadata(""));
string uid = string.empty;
public string UID
{
get
{
//return Encryption.Decrypt((string)GetValue(UIDProperty));
Debug.WriteLine("get called");
return uid;
}
set
{
// SetValue(UIDProperty, Encryption.Encrypt(value));
Debug.WriteLine("set called");
if(uid != value)
{
uid = value;
NotifyPropertyChanged("UID");
}
}
}
注意,UID是公共的(不是私有财产)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.