繁体   English   中英

XAML中的DependencyProperty.Register文本框

[英]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.GetValueDependencyObject.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM