Ответ 1
Нашел ответ, похоже, что вызов PropertyChanged с именем свойства PropertyChangedEventArgs, установленным на ""
, обновляет все привязки.
Также изменилось изменение DataContext, хотя это было немного "чище".
Если мой код выглядит как код ниже, можно ли было бы обновить все привязки напрямую или мне придется жестко закодировать все привязки для обновления?
Сервис-сторона:
[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
}
}
Пожалуйста, не обращайте внимания на любые нарушения стандартов кодирования в примере кода, поскольку он просто предназначен в качестве примера для предполагаемого использования.
Нашел ответ, похоже, что вызов PropertyChanged с именем свойства PropertyChangedEventArgs, установленным на ""
, обновляет все привязки.
Также изменилось изменение DataContext, хотя это было немного "чище".
Вы можете снова обнулить объект DataContext родительского объекта.
DataContext = null;
DataContext = data;
Как сделать "данные" зависимым. Привязка вашего DataContext к этому приведет к обновлению ваших привязок при повторном назначении "данных".