2010-02-06 52 views
1

我希望有人能帮助我解决这个问题,我怀疑我正在做一些愚蠢的事情。我绑定了一个TextBox,以便Text绑定到InputValue。基本上,当文本值改变时,我有一个方法(Inches.Parse),它检查值并返回格式良好的字符串。在set访问器中更改文本框绑定的文本值

如果解析没有错误,我希望文本框具有名为“result”的格式良好的字符串。但是,TextBox不会显示新文本?任何帮助,将不胜感激。

public string InputValue 
{ 
    get 
    { 
     return _inputValue; 
    } 
    set 
    { 
     if (_inputValue != value) 
     {           
      bool error; 
      string result = Inches.Parse(value, 64, out error);      

      if (error != IsValid) 
      { 
       IsValid = error; 
      } 
      if (!error) 
      { 
       _inputValue = result; 
      } 
      else 
      { 
       _inputValue = value; 
      } 

      NotifyPropertyChanged("InputValue"); 
     } 
    } 
} 

回答

3

这是一个错误/问题,将明显被固定在点网4.0

基本上,问题是,如果一个绑定设置的属性不会二传手中寻找NotifyPropertyChanged。您可以通过调度程序在主UI线程上调用NotifyPropertyChanged来解决此问题。它是这样

Application.Current.Dispatcher.BeginInvoke((Action)delegate { NotifyPropertyChanged("InputValue"); }); 

把这个在您的二传手做,你应该罚款..

+0

谢谢Aran,明天我会试试看看会发生什么。 – 2010-02-07 05:20:30

+0

不用担心和生病明天在代码工作,以确保我得到它正确 – 2010-02-07 05:44:22

+0

检查出来,写了一个测试项目,上面的语法工程 – 2010-02-07 22:36:00

1

的问题似乎是,它是由自身结合源属性的更新过程中TextBox不会更新出现的值。

的解决方法可能是设置此绑定表达式

{Binding Path=InputValue, Mode=TwoWay,UpdateSourceTrigger=Explicit} 

注意UpdateSourceTrigger=Explicit此说,你将更新源手动

再添加处理程序TextBoxLostFocus事件(所以我们相信用户已完成编辑)

textBox1.LostFocus += 
(s, e) => 
    { 
    var text = textBox1.Text; 
    [DataSource].InputValue = text; 
    }; 

因此,当TextBox失去focu s数据源中的值将被更新和格式化,然后TextBox将被反弹。

希望这会帮助你。

+0

约updatesourcetrigger的一些信息是在这里:http://msdn.microsoft.com/en-us/library/ ms752347.aspx – 2010-02-06 17:34:16

+0

感谢您的建议。欣赏它。 – 2010-02-07 05:20:13