private static void OnSelectedValuePathChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { TreeView tree = (TreeView)d; SelectedValuePathBindingExpression.ClearValue(tree); tree.UpdateSelectedValue(tree.SelectedItem); }
private BindingExpression PrepareSelectedValuePathBindingExpression(object item) { if (item == null) { return(null); } Binding binding; bool useXml = SystemXmlHelper.IsXmlNode(item); BindingExpression bindingExpr = SelectedValuePathBindingExpression.GetValue(this); // replace existing binding if it's the wrong kind if (bindingExpr != null) { binding = bindingExpr.ParentBinding; bool usesXml = (binding.XPath != null); if (usesXml != useXml) { bindingExpr = null; } } if (bindingExpr == null) { // create the binding binding = new Binding(); binding.Source = item; if (useXml) { binding.XPath = SelectedValuePath; binding.Path = new PropertyPath("/InnerText"); } else { binding.Path = new PropertyPath(SelectedValuePath); } bindingExpr = (BindingExpression)BindingExpression.CreateUntargetedBindingExpression(this, binding); SelectedValuePathBindingExpression.SetValue(this, bindingExpr); } return(bindingExpr); }