Laden...

Binding von Window1 zu Window2

Erstellt von C#Gustl vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.218 Views
C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 6 Jahren
Binding von Window1 zu Window2

Hallo,

ich habe an einem Fenster Object1 gebunden, in diesem Object1 gibt es eine Liste welche ich an einer Listbox lb1 binde. Die Liste besteht aus einer Klasse mit Property Text und einem Bild.

Dieses Bild soll ich Abhängigkeit der Auswahl in einem neuen Fenster Windwo2 gebunden werden.
Genau das bekomme ich nicht hin:

in Class Window1:


private Windwo2 w2;
w2 = new w2(this);
w2.Show();

Class Window2:


public partial class Window2 : Window
    {
        private Window1 WindowsOwner;
        public Window2(Window1 WindowsOwner)
        {
            InitializeComponent();
            this.Window1 = WindowsOwner;
            
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.DataContext = Window1;
        }
    }

xaml Window2:


<Image Name="img_VorschauFenster" Source="{Binding ElementName=lb1,Path=SelectedItem.Img}"/>

Mit meinen Verständnis übergebe ich ihn die Referenz von Window1 und sage ihn das dies der datacontext sein soll. In Window1 gibt es die ListBox lb1, und vonm ausgewähltem Element soll der das Img anzeigen. Aber da tut sich leider nichts. 😦

Danke schon mal.

Gruß,
Gustl

4.941 Beiträge seit 2008
vor 6 Jahren

Binding funktioniert nur mit öffentlichen Eigenschaften (public property), also müßtest du in der Klasse Window1 eine passende Eigenschaft definieren, welche dann die ListBox referenziert.

Aber gut ist das nicht, denn ein untergeordnetes Fenster (wie Window2) sollte nicht direkt auf ein übergeordnetes Fenster zugreifen.

Du solltest dir aber mal besser auch [Artikel] MVVM und DataBinding durchlesen, damit du passende ViewModels erstellst.

C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 6 Jahren

Hallo,

ich habe ein ViewModel, aber ich verstehe nicht wie ich das Image von der Auswahl in der ListBox in ein public Property im ViewModel bekommen kann. Nehmen wir mal an Object1 ist im ViewModel.

xaml von Window1:

<ListBox x:Name="lb1" ItemsSource="{Binding Object1}"/>

<Image Name="img_Vorschau" Source="{Binding ElementName=lb1,Path=SelectedItem.Img}"/>

Wie bekomme ich nun das angezeigte Image in eine Variable, welche sich beim Ändern auch aktualisiert?

Wenn ich im ViewModel ein Property ImageSource erstelle und diesem dann img_Vorschau.Source zuweise, wird set nur bei der Zuweisung aufgerufen, aber nicht wenn sich das Binding ändert...

5.658 Beiträge seit 2006
vor 6 Jahren

Hi C#Gustl,

erstelle im ViewModel ein zusätzliches Property SelectedObject1 und ändere den XAML-Code wie folgt:

<ListBox ItemsSource="{Binding Object1}" SelectedItem="{Binding SelectedObject1}"/>

<Image Source="{Binding SelectedObject1.Img}"/>

Schau dir auch mal das Beispiel-Projekt in dem von Th69 verlinkten Artikel an, dann wird es evtl. etwas klarer.

Weeks of programming can save you hours of planning