Win8.1中与Caliburn的数据绑定问题

时间:2013-12-23 13:12:15

标签: c# windows-8 binding windows-runtime caliburn.micro

解析用户输入后,我在更新文本框时遇到了一些问题。 我在Windows 8.1商店应用程序中使用了caliburn微框架。

我的房产布局如下:

private string mass = "0";
    public string Mass
    {
        get { 
            return mass;
        }
        set
        {
            if (mass != value)
            {
                mass = value.ParseUserInput();
                NotifyOfPropertyChange(() => Mass);
                NotifyOfPropertyChange(() => Result);
            }
        }
    }

 public static string ParseUserInput(this string value)
    {
        double result;
        double.TryParse(value, out result);
        return result.ToString();
    }

我遇到的问题是,当我输入有效输入时,例如" 001.0"我希望通过显示" 1"来更新文本框以反映这一点。 (质量被确认改为" 1")但是它仍然是" 001.0"

如果我把NotifyOfPropertyChange(()=> Mass);在稍后调用的代码中的语句然后文本框按预期更新,所以我知道绑定有两种方式。 此外,代码在我的wpf项目中完美运行。

任何人都有一些想法(线程问题?)

好的,我将行改为:

new System.Action(() => base.NotifyOfPropertyChange(() => Mass)).BeginOnUIThread();

并且这表现得像预期的那样,任何想法为什么我必须这样做,因为我认为它不应该是必要的,是吗?

非常感谢你的时间

1 个答案:

答案 0 :(得分:0)

我怀疑问题出在WinRT的绑定基础结构中。我的猜测是绑定是忽略了你的属性更改通知质量,因为它感觉它是告诉你它已经改变的那个。

通过将更改分派给UI线程,您可能会将通知推迟到足以使绑定认为它不会触发通知。

不是解决方案,但它可以解释为什么需要代码。