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

Teo*_*zon 18 .net c# wpf xaml binding

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

服务端:

[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;
}
Run Code Online (Sandbox Code Playgroud)

客户端xaml(省略了名称空间样板代码):

<Window x:Class="MyWindow" DataContext="{Binding RelativeSource={RelativeSource Self}}" Title="{Binding Path=val1, Mode=OneWay}">
    <DockPanel>
        <TextBlock Text="{Binding Path=val1, Mode=OneWay}"/>
        <TextBlock Text="{Binding Path=val2, Mode=OneWay}"/>
    </DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

客户端代码behing:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

请忽略示例代码中的任何编码标准违规,因为它仅用作预期用途的示例.

Teo*_*zon 28

找到答案,似乎调用PropertyChanged并将PropertyChangedEventArgs属性名设置为""刷新所有绑定.
DataContext的改变也起作用,虽然这感觉有点"干净".


Ben*_*nCr 23

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

DataContext = null;
DataContext = data;
Run Code Online (Sandbox Code Playgroud)

  • 我似乎记得它不起作用,不.我认为它意识到你已经将它设置为相同的参考,因此不会重新绑定. (2认同)