簡體   English   中英

有沒有辦法刷新WPF中的所有綁定?

[英]Is there a way to refresh all bindings in 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>

客戶端代碼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
    }
}

請忽略示例代碼中的任何編碼標准違規,因為它僅用作預期用途的示例。

找到答案,似乎調用PropertyChanged並將PropertyChangedEventArgs屬性名設置為""刷新所有綁定。
DataContext的更改也有效,盡管這感覺有點“干凈”。

您可以為null,然后重新設置父對象的DataContext。

DataContext = null;
DataContext = data;

如何使“數據”成為依賴屬性。 將DataContext綁定到那將使您的綁定在重新分配“數據”時更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM