gpt4 book ai didi

c# - DependencyObject.InvalidateProperty 不工作

转载 作者:可可西里 更新时间:2023-11-01 08:07:13 25 4
gpt4 key购买 nike

基于documentation通过 MSDN...

You can also use InvalidateProperty to force re-evaluation of a binding against a data source that is not able to implement the recommended INotifyPropertyChanged notification mechanism...

...下面的代码应该可以工作,但实际上没有。

public partial class Window1 : Window
{
private Payload _payload = new Payload();

public Window1()
{
InitializeComponent();

this.DataContext = _payload;
}

private void Invalidate(object sender, RoutedEventArgs e)
{
_payload.Timestamp = DateTime.Now.Add(TimeSpan.FromHours(1)).ToLongTimeString();

Button b = sender as Button;
b.InvalidateProperty(Button.ContentProperty);
}
}

public class Payload
{
private String _payload = DateTime.Now.ToLongTimeString();
public String Timestamp
{
get
{
return _payload;
}
set
{
_payload = value;
}
}
}

<Grid>
<Button Click="Invalidate"
Width="100"
Height="50"
Content="{Binding Path=Timestamp}"/>
</Grid>

知道是什么导致了这种行为吗?

最佳答案

正如您所提到的,它应该有效,但实际上没有。但有一个简单的解决方法:

// Doesn't work:
//b.InvalidateProperty(Button.ContentProperty);

// Works:
BindingOperations.GetBindingExpression(b, Button.ContentProperty).UpdateTarget();

我调试了引用源,所有 InvalidateProperty 在您的情况下所做的是导致缓存值从 BindingExpression 重新读取到 Button 内容 属性。顺便说一下,我不知道什么时候这甚至是必要的,但让 BindingExpression 重新读取原始属性没有用。

由于该解决方法既方便又通用,唯一值得进一步努力的是向 Microsoft 提交错误报告。

关于c# - DependencyObject.InvalidateProperty 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com