none
同时将多个textbox的内容更新到更新源 RRS feed

  • 问题

  • 我有一个用户可编辑的窗体,上面有很多textbox,并且希望将源更新延迟到用户完成字段编辑并单击“确定”之后。于是将textbox.text的UpdateSourceTrigger 值设置为 Explicit,这样我更新一个textbox需要做以下的工作,BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);be.UpdateSource();

    我想同时更新整个窗口的这些textbox,如何操作?查找资料后知道要用BindingGroup,但并不清楚具体该怎么做

    2011年10月28日 5:39

答案

  • 没有直接的方法,必须自己遍历VisualTree,然后完成特定属性的UpdateSource(), 参考下面的函数,可以完成遍历和更新:

    public static void UpdateBindingSources(DependencyObject obj,
                              params DependencyProperty[] properties)
    {
      foreach (DependencyProperty depProperty in properties)
      {
        //check whether the submitted object provides a bound property
        //that matches the property parameters
        BindingExpression be =
          BindingOperations.GetBindingExpression(obj, depProperty);
        if (be != null) be.UpdateSource();
      }
    
      int count = VisualTreeHelper.GetChildrenCount(obj);
      for(int i=0; i<count; i++)
      {
        //process child items recursively
        DependencyObject childObject = VisualTreeHelper.GetChild(obj, i);
        UpdateBindingSources(childObject, properties);
      }
    }
    

    这个方法是同时可以更新很多属性,比如TextBox.Text, ComboBox.Selected, 可以这样用:

    DependencyProperty dpText = TextBox.TextProperty;
    DependencyProperty dpSelectedItem = XamComboEditor.SelectedItemProperty;
    UpdateBindingSources(this, dpText, dpSelectedItem);
    

    第一个参数是根元素,后面的是属性(dp)。

     

    Best regards,


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年10月31日 6:12
    版主