wpf - 绑定(bind)文本属性时出现奇怪的组合框行为

标签 wpf data-binding

如果我们有一个将“twoway”绑定(bind)到 View 模型上的 TimeSpan 属性的组合框,并且转换器将时间跨度 View 模型属性更改为字符串,添加表示分钟的“m”,那么在编辑组合框值时说10m 到 5,我预计:

WPF 绑定(bind)调用 ConvertBack 来获取更新源属性的值 - 我们假设时间跨度为 5 分钟。

调用 View 模型的时间跨度属性 setter 并设置基础字段(时间跨度从 10 更改为 5),然后引发 OnPropertyChanged

WPF Binding 接收事件,因此调用其处理程序方法,该方法首先对值执行转换,然后将此“5m”转换后的值设置为目标文本属性

除了,最后一步没有发生,并且组合框保持在 5。我实际上想要这种行为,但想了解为什么最后一步没有发生。奇怪的是,更改为文本框确实给出了我期望的行为(立即更新 5 到 5m)

编辑:原始问题错误地指出了文本框,我应该在其中编写组合框

更新:使用 snoop 实用程序,我看到组合框的文本属性确实变为 5m,但显示仍为 5 - 我只能假设如果正在编辑组合框,它不会刷新其文本显示。将问题标题从“使用转换器的 WPF 数据绑定(bind)目标-源-目标循环”更改为更准确地反射(reflect)现在的问题。

最佳答案

您能否展示您遇到此问题的示例代码,因为此示例代码适用于我 -

XAML:

<TextBox Text="{Binding Time, Converter={StaticResource MyConverter}}"/>

属性

public TimeSpan Time
{
   get
   {
      return time;
   }
   set
   {
      if (time != value)
      {
         time = value;
         OnPropertyChanged("Time");
      }
   }
}

转换器

public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is TimeSpan)
            {
                return ((TimeSpan)value).Minutes.ToString() + "m";
            }
            return String.Empty;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is string)
            {
                return new TimeSpan(0, System.Convert.ToInt32(value), 0);
            }
            return new TimeSpan();
        }
    }

关于wpf - 绑定(bind)文本属性时出现奇怪的组合框行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439981/

相关文章:

c# - 如何在 WPF 中获取按键的 ascii dec 编号

c# - 如何制作 WPF Expander Stretch?

asp.net - 将 DropDownList 绑定(bind)到没有数据源的详细信息 View

java - 找不到值为 boolean 值类型的属性 'app:vm' 的 GETTER

javascript - ajax后的 Angular 数据绑定(bind)

wpf - WPF-图片 'is not part of the project or its Build Action is not set to Resource'

c# - NotifyOnPropertyChange实现

c# - 在 WPF 应用程序中使用 Xbox 360 Controller

recyclerview 中的 android 数据绑定(bind)

xaml - 如果删除项目,ListView 不会更新