我有一個屬性 ( FileName ),當我在調試器中觀察它時更新得很好(同時在視圖模型和 XAML 中懸停在屬性上),但 UI 不會反映值更新。我設置了一個斷點set { this.MutateVerbose(ref _fileName, value, RaisePropertyChanged()); },可以觀察它進入它并通過RaisePropertyChanged().我通過 將其實例化為“未更新”的初始值FileName = "Not Updated";,雖然該屬性通過應用程序的運行持續時間成功更新為其他值FileName = SelectRandomString();,但 UI 永遠不會更新。相關界面代碼: <TextBlock Text="{Binding FileName}" HorizontalAlignment="Center"> <TextBlock.DataContext> <ns:ProgressViewModel /> </TextBlock.DataContext> </TextBlock>MutateVerbose 的代碼: public static void MutateVerbose<TField>(this INotifyPropertyChanged instance, ref TField field, TField newValue, Action<PropertyChangedEventArgs> raise, [CallerMemberName] string propertyName = null) { if (EqualityComparer<TField>.Default.Equals(field, newValue)) return; field = newValue; raise?.Invoke(new PropertyChangedEventArgs(propertyName)); }更新:如果我將進度計時器作為視圖模型加載的一部分啟動,如下所示: public ProgressViewModel() { KickOffProgressTimer(); }用戶界面按原樣更新。但我不理解這種行為,這是不可取的。我不希望該KickOffProgressTimer();方法在應用程序啟動后立即執行,而是僅在從后面的主窗口代碼中單擊按鈕時執行: private void CircleButtonClick(object sender, RoutedEventArgs e) { ProgressViewModel pvm = new ProgressViewModel(); CircleButton.DataContext = pvm; pvm.KickOffProgressTimer(); }
2 回答

尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
您需要指定UpdateSourceTrigger
將觸發 UI 更新的事件:
<TextBlock Text="{Binding FileName, UpdateSourceTrigger=PropertyChanged}" ...
- 2 回答
- 0 關注
- 268 瀏覽
添加回答
舉報
0/150
提交
取消