2016-04-24 6 views
0

Ich versuche, 2 WegeWarum kommt die 2-Wege-Bindung nicht funktionieren

In meinem Viewmodel zu binden, habe ich

private Temporary _selectedCompany; 
    public Temporary SelectedCompany 
    { 
     get 
     { 
      return this._selectedCompany; 
     } 
     set 
     { 
      if (this._selectedCompany == value || value == null) 
       return; 

      this._selectedCompany = value; 
      this.SelectedCompany.CompanyName = "TestName"; 
      base.OnPropertyChanged("SelectedCompany"); 
     } 
    } 

Temporary ist eigentlich eine Klasse ähnlich eine Klasse, die Sie tun würden für eine CompanyAddress (Name, Land, Telefon usw.) und wurde von EntityFramework erstellt.

In der entsprechenden Ansicht, die XAML ist

<local:CompanyDetail CompanyName="{Binding SelectedCompany.CompanyName}"/> 

In Code hinter der Zollkontrolle

// Dependency Property 
    public static readonly DependencyProperty CompanyNameProperty = 
     DependencyProperty.Register("CompanyName", typeof(string), 
     typeof(CompanyDetail), null); 

    // .NET Property wrapper 
    public string CompanyName 
    { 
     get { return (string)GetValue(CompanyNameProperty); } 
     set { SetValue(CompanyNameProperty, value); } 
    } 

gibt nichts in dem Ansichtsmodell ist. Es gibt die folgende XAML

<TextBox Text="{Binding CompanyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=UserControl, AncestorLevel=1, Mode=FindAncestor}}" /> 

Also, wenn die Kontrollen geladen und auf dem Bildschirm angezeigt, sehe ich den Wert „Testname“ in der TextBox aber, wenn ich den Wert zu ändern, indem Sie und klicken Sie dann auf eine Schaltfläche OK I kann sehen, dass der Wert nicht aktualisiert wurde.

Ich nehme an, es hat nichts mit INotifyPropertyChanged zu tun, weil ich denke, es ist alles ein Referenztyp auf irgendeine Weise?

Was mache ich falsch?

+0

Sind Sie sicher, dass AncestorLevel = 1? Sie müssen es nicht angeben, wenn Sie AncestorType angeben –

Antwort

1

Die Company Bindung muss Zweiwege hergestellt werden, entweder indem sie sie ausdrücklich

<local:CompanyDetail 
    CompanyName="{Binding SelectedCompany.CompanyName, Mode=TwoWay}"/> 

oder indem er erklärt, die Abhängigkeitseigenschaft zu binden, Zwei-Wege durch Voreinstellung

public static readonly DependencyProperty CompanyNameProperty = 
    DependencyProperty.Register(
     "CompanyName", typeof(string), typeof(CompanyDetail), 
     new FrameworkPropertyMetadata(
      null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 
+0

Sie sind wirklich eine sehr intelligente Person. Dies ist das zweite Mal in so vielen Wochen, in denen Sie geholfen haben. Vielen Dank – MyDaftQuestions

Verwandte Themen