Есть ли способ обновить все привязки в WPF?

Если мой код выглядит как код ниже, можно ли было бы обновить все привязки напрямую или мне придется жестко закодировать все привязки для обновления?

Сервис-сторона:

[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 (код шаблона пространства имен опущен):

<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>

Клиентский код:

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
    }
}

Пожалуйста, не обращайте внимания на любые нарушения стандартов кодирования в примере кода, поскольку он просто предназначен в качестве примера для предполагаемого использования.

Ответы

Ответ 1

Нашел ответ, похоже, что вызов PropertyChanged с именем свойства PropertyChangedEventArgs, установленным на "", обновляет все привязки.
Также изменилось изменение DataContext, хотя это было немного "чище".

Ответ 2

Вы можете снова обнулить объект DataContext родительского объекта.

DataContext = null;
DataContext = data;

Ответ 3

Как сделать "данные" зависимым. Привязка вашего DataContext к этому приведет к обновлению ваших привязок при повторном назначении "данных".