2016-07-16 23 views
0

Ich habe ein Benutzer-Steuerelement (sagen A) mit zwei ContentPresenter jeweils gebunden an eine andere Benutzersteuerung (sagen B und C).WPF - Binding zwischen usercontrol

In einem der beiden UserControl (sagen B) habe ich eine ListBox von MyItem.

  <ListBox ItemsSource="{Binding MyItemList}" SelectedItem="{Binding SelectedMyItem}"> 

MyItem Code:

Public Class MyItem 
    Implements INotifyPropertyChanged 

    Private m_Name As Integer 
    Public Property Name As Integer 
     Get 
     Return m_Name 
     End Get 
     Set(value As Integer) 
     m_Name = value 
     End Set 
    End Property 

    ... 

End Class 

Im anderen (sagen C) Ich habe Textfelder, die ich SelectedItem Eigenschaften binden wollen (sagen MyItem.Name).

 <TextBox Text="{Binding SelectedItem.Name}"/> 

Ist es in irgendeiner Weise möglich? Weil ich keinen finden kann.

Antwort

0

Was Sie sagen, ist fast unmöglich.

Binden Sie den Textfeldtext an eine Eigenschaft im Ansichtsmodell c. Bindet den ausgewählten Listeneintrag an eine Eigenschaft im Ansichtsmodell b.

Emittieren Sie ein Ereignis mit Argument als Name Wert als Zeichenfolge, wenn das ausgewählte Element geändert wird. Behandle das Ereignis im Viewmodel c und aktualisiere den Textfeldtext mit dem empfangenen Argument Name.

Dies würde den Trick tun.

Eine andere Möglichkeit besteht darin, B- und C-Modellinstanzen in einem Ansichtsmodell zu erstellen und cviewmodelinstance.TextboxPropertyName zu aktualisieren, wenn die bviewmodelinstance.selectedListItem-Eigenschaft geändert wird.

+0

Vielen Dank für die Antwort. Ich bin sehr interessiert an der zweiten Methode, die Sie erwähnt haben, weil ich fast B und C Viewmodel in einem Viewmodel erstellen würde. Aber ich verstehe nicht, wie man eine Eigenschaft aktualisiert, wenn eine andere geändert wird. Können Sie in diesem Fall ein Beispiel für die Bindung des Textfelds (in XAML) schreiben? Danke – Emmanuele

+0

Ich weiß nicht, Vb tatsächlich. Einfach an die String-Eigenschaft im entsprechenden View-Modell binden. Abonnieren von viewmodelinstance.property geändert im übergeordneten Ansichtsmodell. Bei einer Änderung der Eigenschaft überprüfen Sie den Namen der Eigenschaft mit ** e **. Wenn der Eigenschaftsname == Ihre erforderliche Eigenschaft ist, legen Sie die an die Textfeldtexteigenschaft gebundene Zeichenfolge fest. – ViVi