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)