如果我的代码看起来像下面的代码,是否可以直接刷新所有绑定,还是必须对所有绑定进行硬编码才能刷新?
If my code looks somewhat like the code beneath, would it be possible to refresh all bindings directly or would I have to hard-code all the bindings to refresh?
服务端:
[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(省略了命名空间样板代码):
Client-side xaml (namespace boilerplate code omitted):
<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 } }请忽略示例代码中的任何违反编码标准的行为,因为它仅是作为预期用途的示例.
Please disregard any coding standards violations in the example code since it is simply intended as an example for the intended use.
推荐答案找到了答案,似乎是在将PropertyChangedEventArgs属性名称设置为""的情况下调用PropertyChanged会刷新所有绑定. 更改DataContext的方法也可以,尽管感觉有点干净".
Found the answer, seems like that calling PropertyChanged with the PropertyChangedEventArgs property name set to "" refreshes all bindings. The DataContext changing worked too, although this felt a bit "cleaner".
更多推荐
有没有一种方法可以刷新WPF中的所有绑定?
发布评论