2016-05-20 20 views
0

Ich versuche, die TextBox die Eigenschaft stringBody der CurrentDialog -Eigenschaft des Fensters anzeigen zu lassen. Hier ist der XAML-Teil:Binden von TextBox an Objekt WPF

<TextBox x:Name="ComposerBox" Height="90.302" Margin="311,0,141.355,10" 
... 
Text="{Binding Body}" 
ScrollViewer.CanContentScroll="True" SpellCheck.IsEnabled="True"  
VerticalAlignment="Bottom"> 

Hier ist eine Zeichenfolge aus dem Fenster Konstruktor:

MessagingBox.DataContext = CurrentDialog; 

Ich habe auch versucht, Datacontext dies ohne Ergebnis eingestellt werden. Hier ist, wie CurrentDialog definiert:

private MessageDialog CurrentDialog { get; set; } 

Hier ist die MessageDialog Klassendefinition:

[Serializable][DataContract] 
public class MessageDialog 
{ 
    public string Name { get; private set; } 
    public UserData User { get; private set; } 

    private List<Message> Dialog = new List<Message>(); 
    public string Body { get; private set; } 

    public MessageDialog(UserData data) 
    { 
     Name = data.Username; 
     User = data; 
     Body = ""; 
    } 

    public void Add(Message msg) 
    { 
     Dialog.Add(msg); 
     Body += $"{msg.From}: {msg.Body} \n\n"; 
    } 

} 

}

Die Bindung überhaupt nicht funktioniert. Ich möchte auch, dass es in eine Richtung geht.

+0

Ohne ein gutes [mcve], das das Problem zuverlässig reproduziert, ist es unmöglich zu wissen, warum der Code nicht funktioniert. Die vorgeschlagene Antwort ist jedoch eine gute Schätzung. Wenn Sie erwarten, dass die Eigenschaft 'Text' aktualisiert wird, wenn die Quelleigenschaft' body' geändert wird, müssen Sie WPF eine Möglichkeit geben, um zu wissen, wann dies tatsächlich geschieht. 'INotifyPropertyChanged' ist der übliche Weg, dies zu tun. –

Antwort

0

Text="{Binding CurrentPerson.Body}" 

nicht sicher, warum der Bindungspfad CurrentPerson enthält, wenn es CurrentDialog sein soll, aber auch das soll nicht da sein. Da die DataContext bereits CurrentDialog eingestellt ist, können Sie einfach binden Sie den Text an:

Text="{Binding Body}" 

Sie müssen INotifyPropertyChanged implementieren, so wissen die WPF, wenn die Eigenschaft geändert:

[Serializable][DataContract] 
public class MessageDialog : INotifyPropertyChanged 
{ 
    #region public string Body 
    private string m_Body; 
    public string Body 
    { 
     get { return m_Body; } 
     private set 
     { 
      if (m_Body == value) 
       return; 

      m_Body = value; 
      this.NotifyPropertyChanged(); 
     } 
    } 
    #endregion 

    #region INotifyPropertyChanged Members 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName]string propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 
} 
+0

Text = "{Binding CurrentPerson.Body}" ist von einem der Versuche, ich habe es entfernt, funktioniert immer noch nicht –

Verwandte Themen