【问题标题】:TimePicker lost the BindingTimePicker 失去了绑定
【发布时间】:2016-06-02 18:33:14
【问题描述】:

我使用的是 Mahapp TimePicker 控件,我是这样定义的:

<Controls:TimePicker Culture="it-IT" Width="200" Controls:TextBoxHelper.Watermark="Start pause" SelectedTime="{Binding Stop, IsAsync=True, UpdateSourceTrigger=PropertyChanged}"/>

这是绑定值的属性:

private TimeSpan? _stop;
public TimeSpan? Stop
{
        get { return _stop; }
        set
        {
            _stop = value;
            OnPropertyChanged();
        }
}

这是我的OnPropertyChanged(); 实现:

public new event PropertyChangedEventHandler PropertyChanged;

protected new virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

情况是这样的:当我更改控件上的值时,这不会执行绑定,这只发生在第一次,第二次执行绑定时,值被正确获取。如果我在 get 和 set 上都放了一个断点,似乎绑定正确完成。我不知道发生了什么。

【问题讨论】:

  • 删除IsAsync
  • @ManfredRadlwimmer 哇!工作,但为什么不使用 isAsync 呢?你能启发我吗?

标签: c# wpf mahapps.metro


【解决方案1】:

删除IsAsync = true。仅当您的 getter 预期以明显延迟返回结果时,才应使用 IsAsync。或者正如微软所说:

当绑定源属性的 get 访问器可能需要很长时间时,请使用 IsAsync 属性。一个示例是具有从 Web 下载的 get 访问器的图像属性。将 IsAsync 设置为 true 可避免在下载时阻塞 UI。

所以基本上 getter 在另一个线程中执行,并在完成后将值返回给绑定。不知道 WPF 实际如何处理带有IsAsync 的设置器,也许其他人可以添加该部分。

【讨论】:

  • @Heisenberg 如果你真的想要 async 行为,那么在代码隐藏中创建一个 Task 并在完成后将值写入绑定属性。
猜你喜欢
  • 2019-02-17
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2021-08-02
相关资源
最近更新 更多