C# 在PropertyChangedCallback期间更新绑定属性的值

C# 在PropertyChangedCallback期间更新绑定属性的值,c#,wpf,dependency-properties,inotifypropertychanged,C#,Wpf,Dependency Properties,Inotifypropertychanged,在这种情况下,我需要拦截WPF设置绑定到文本框的属性值的尝试,并更改实际存储的值。基本上,我允许用户在文本框中输入复杂值,但自动将其解析为组件 一切正常,但我无法让UI刷新并向用户显示新计算的值 查看模型 public类主视图模型:INotifyPropertyChanged { 私有字符串serverName=string.Empty; 公共事件属性更改事件处理程序属性更改; 公共字符串服务器名 { 得到 { 返回this.serverName; } 设置 { 此.serverNameChan

在这种情况下,我需要拦截WPF设置绑定到文本框的属性值的尝试,并更改实际存储的值。基本上,我允许用户在文本框中输入复杂值,但自动将其解析为组件

一切正常,但我无法让UI刷新并向用户显示新计算的值

查看模型

public类主视图模型:INotifyPropertyChanged
{
私有字符串serverName=string.Empty;
公共事件属性更改事件处理程序属性更改;
公共字符串服务器名
{
得到
{
返回this.serverName;
}
设置
{
此.serverNameChanged(值);
}
}
私有void NotifyPropertyChanged(字符串propertyName)
{
if(this.PropertyChanged!=null)
{
this.PropertyChanged(this,newpropertychangedventargs(propertyName));
}
}
私有void服务器名已更改(字符串值)
{
if(Uri.IsWellFormedUriString(value,UriKind.Absolute))
{
var uri=新uri(值);
this.serverName=uri.Host;
this.NotifyPropertyChanged(“服务器名”);
//在此处设置其他字段并通知属性更改。。。
}
}
}
查看


当用户在“服务器名称”文本框中键入/粘贴/等完整URL并弹出选项卡时,视图模型代码将运行,并且视图模型中的所有字段都已正确设置。绑定到UI的所有其他字段将刷新并显示。但是,即使
ServerName
属性返回正确的值,屏幕上显示的
Text
仍然是旧值

是否有一种方法迫使WPF获取新的属性值,并在“源属性更改”过程的中间刷新显示?

注意:


我也尝试过将
ServerName
a
dependencProperty
,并在实际的
PropertyChangedCallback
中进行这项工作,但结果是相同的。

正如Bill Zhang所指出的,实现这一点的方法是运行
NotifyPropertyChanged
,甚至通过dispatcher;这将导致事件在当前事件完成后运行,并正确更新显示

Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => 
    this.NotifyPropertyChanged("ServerName"))) 

我无法复制你的问题。如果在NotifyPropertyChanged(“ServerName”)之后注释掉所有代码,是否有效?通常,您可以使用Dispatcher.CurrentDispatcher.BeginInvoke(新操作(()=>this.NotifyPropertyChanged(“服务器名”))来实现这一点。您在输出窗口中是否看到任何错误?@BillZhang实际工作(通过Dispatcher运行通知);你能给我一个答案让我接受吗?