2016-08-01 15 views
0

Dies ist ein XAML-Schnipsel aus meinem Projekt:
Erhalten Element der Bindung von XAML durch Code

<TextBox x:Name="txt_Time1" LostFocus="TextBox_LoseFocus"> 
    <TextBox.Text> 
    <Binding Converter="{StaticResource timezoneconverter}" 
    ElementName="cmb_TZ1" Path="SelectedValue"/> 
    </TextBox.Text> 
</TextBox> 

In meinem Code hier:

 private void TextBox_LoseFocus(object Sender, EventArgs e) 
     { 
     var txtBox = Sender as TextBox; 

Meine Frage ist: Ist es möglich, um den ElementName dieser TextBox durch Code zu bekommen?

EDIT: Um diese Frage hinzuzufügen, um es zu runden.
Wie kann dies in einem MultiBinding-Szenario durchgeführt werden?

<TextBox x:Name="txt_Time1" LostFocus="TextBox_LostFocus" > 
      <TextBox.Text> 
       <MultiBinding Converter="{StaticResource timezoneconverter}"> 
       <Binding ElementName="cmb_TZ1" Path="SelectedValue"/> 
       <Binding RelativeSource="{RelativeSource Self}" Path="Text"/> 
       </MultiBinding> 
      </TextBox.Text> 
     </TextBox> 

Antwort

0

Für den Elementnamen im Klar Abrufen Bindung:

BindingExpression bindingExpression = 
    txtBox.GetBindingExpression(TextBox.TextProperty); 
    Binding parentBinding = bindingExpression.ParentBinding; 
    String elementName = parentBinding.ElementName; 

In einem Multi Bindungsszenario:

MultiBindingExpression multiBindingExpression = BindingOperations.GetMultiBindingExpression(txtBox, TextBox.TextProperty); 
Binding parentBinding = ((BindingExpression)multiBindingExpression.BindingExpressions[0]).ParentBinding; 
String elementName = parentBinding.ElementName; 
2

BindingOperations.GetBinding(...) geben Ihnen die Binding und ElementName ist Eigentum der Binding Klasse.

1

BindingExpression bindingAusdruck = textBox1.GetBindingExpression (TextBox.TextProperty); Binding parentBinding = bindingExpression.ParentBinding;

+0

Jede Idee, wie das sein kann in einem MultiBinding-Szenario gemacht? –

+0

Für die Mehrfachbindung können Sie den folgenden Code verwenden: 'MultiBinding bindingExpression = BindingOperations.GetMultiBinding (txtSample, TextBox.TextProperty); Sammlung parentBinding = bindingExpression.Bindings; ' –

1

Sie dies tun können,

private void txt_Time_LostFocus(object sender, RoutedEventArgs e) 
     { 
      var txtBox = sender as TextBox; 
      Binding myBinding = BindingOperations.GetBinding(txt_Time, TextBox.TextProperty); 
      var elementName = myBinding.ElementName; 
     }