C# 有没有办法刷新WPF中的所有绑定?

C# 有没有办法刷新WPF中的所有绑定?,c#,.net,wpf,xaml,binding,C#,.net,Wpf,Xaml,Binding,如果我的代码看起来有点像下面的代码,是否可以直接刷新所有绑定,或者我必须硬编码所有绑定才能刷新 服务方: [ServiceContract] public interface IMyServiceContract { [OperationContract] MyDataContract GetData(); } [ServiceBehavior] public class MyService { [OperationBehavior] public MyDataC

如果我的代码看起来有点像下面的代码,是否可以直接刷新所有绑定,或者我必须硬编码所有绑定才能刷新

服务方:

[ServiceContract]
public interface IMyServiceContract {
    [OperationContract]
    MyDataContract GetData();
}
[ServiceBehavior]
public class MyService {
    [OperationBehavior]
    public MyDataContract GetData() {
        MyDataContract data = new MyDataContract();
        data.val1 = "123";
        data.val2 = "456";
        return data;
    }
}
[DataContract]
public class MyDataContract {
    [DataMember]
    public string val1;
    public string val2;
}
客户端xaml(省略名称空间样板代码):


请忽略示例代码中任何违反编码标准的情况,因为它只是用于预期用途的示例。

您可以为空,然后重新设置父对象的DataContext

DataContext = null;
DataContext = data;

让“数据”成为依赖属性怎么样。将DataContext绑定到将在重新分配“数据”时更新绑定。找到答案后,调用PropertyChangedEventArgs属性名设置为
的PropertyChanged似乎会刷新所有绑定。

数据上下文更改也起了作用,尽管这感觉有点“干净”。

我似乎记得它不起作用,不。我认为它意识到您已将其设置为相同的引用,因此不会重新绑定。我认为这就是BenCr建议先“空,然后重新设置”的原因将null作为动词,将DataContext设置为null,然后设置回原始DataContext,以便将其视为更改。这确实是我的建议。我有一个场景,将DataContext设置为null不会重置UI-它会保留过时的值。只有在我将DataContext设置为新值之后,UI元素才会更新。例如,我有一个主/详细模式,我删除了主列表中的最后一项。之后,详细信息字段将保留上次删除项目的项目信息。当我删除除最后一项之外的所有项时,它可以正常工作,因为我将DataContext重新分配给主列表中的一个剩余项。当我删除最后一项时,有没有想过如何让用户界面“清除”这些值?我需要收回以前的评论。UI更新失败的原因是,在所述场景下,另一行代码引发了异常。在删除最终主项时,将DataContext设置为null实际上会导致详细信息窗格“清除”UI中的所有值。
PropertyChanged
在主页上,控件?@ΩmegaMan这是我最后一次使用WPF,但如果我没记错的话。。窗口/主页。我在一个页面上有一个自定义控件,在它或主页上都没有直接的
PropertyChanged
方法。最后我做了
DataContext=null
public partial class MyWindow {
    MyServiceClient client = new MyServiceClient();
    MyDataContract data;
    public string val1 {get{return data.val1;}}
    public string val2 {get{return data.val2;}}
    DispatcherTimer updateTimer = new DispatcherTimer();

    public MyWindow() {
        timer.Interval = new TimeSpan(0, 0, 10);
        timer.Tick += new EventHandler(Tick);
        Tick(this, null);
        timer.Start();
        InitializeComponent();
    }

    void Tick(object sender, EventArgs e) {
        data = client.GetData();
        // Refresh bindings
    }
}
DataContext = null;
DataContext = data;