WPF binding Listbox SelectedItem im ViewModel

Ich arbeite gerade an einer WPF-Anwendung. Der main-Seite besteht aus einem grid mit 2 Spalten und einer Zeile. in der ersten Spalte habe ich eine listbox und auf die 2. Spalte habe ich ein stackpanel-Steuerelement namens thePanel, das will ich ändern auf ausgewählte Element einer listbox.ich zuerst implementiert diese in der View(mainwindow.xaml.cs) mit dem selectionChanged-event der Listbox und es funktionierte. Ich habe versucht, gelten die MVVM-so hatte ich es in der viewModel. der datenkontext des mainwindow wird in seinem Konstruktor und ist vom Typ UserViewModel. Die userViewModel hat eine Eigenschaft vom Typ ListBoxItem namens SelectedItem, die gebunden ist in XAML auf die SelectedItem meiner listbox. Wenn das geändert wird, gehe ich bis in die UserViewModel mit "Eltern" bis "MainWindow" und entfernen Sie dann alle Kinder thePanel und das hinzufügen, was ich will. Die EntriesUC ist ein UserControl, das den dataContext in der Konstruktor-parameter. Es ist kein problem, da es funktioniert, wenn ich umgesetzt SelectionChanged in der Ansicht. Das problem ist immer, wenn ich Sie jedes Element der listbox, passiert nichts.

Hauptfenster:

<Window x:Class="SyntheticLTM.View.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewNamespace="clr-namespace:SyntheticLTM.View"
        Title="MainWindow" WindowState="Maximized" Height="350" Width="525">

    <StackPanel>
        //MENU IMPLEMENTATIOn

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*"/>
                <ColumnDefinition Width="4*"/>
            </Grid.ColumnDefinitions>

            <StackPanel Grid.Column="0">
                <Button Content="{Binding Name}" Width="84" />
                <ListBox Name="mainListBox" SelectionMode="Single" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
                    <ListBoxItem>Data entries</ListBoxItem>
                    <ListBoxItem>Categories</ListBoxItem>
                    <ListBoxItem>Favorites</ListBoxItem>
                    <ListBoxItem>Search</ListBoxItem>
                </ListBox>
            </StackPanel>

            <StackPanel Name="thePanel" Grid.Column="1"  />

        </Grid>
    </StackPanel>

</Window>

UserViewModel:

private ListBoxItem selectedItem;
 public ListBoxItem SelectedItem
            {
                get
                {
                    return selectedItem;
                }
                set
                {
                    selectedItem = value;
                    RaisePropertyChanged("SelectedItem");

                    var thePanel = new StackPanel();
                    thePanel=((((((selectedItem as ListBoxItem).Parent as ListBox).Parent as StackPanel).Parent as Grid).Parent as StackPanel).Parent as MainWindow).thePanel;
                    string message;
                    message = selectedItem.ToString();

                    if (message == "Data entries")
                    {
                        var allEntries = new CategoryViewModel();

                        foreach (var category in (thePanel.DataContext as UserViewModel).Categories)
                            allEntries.Entries = new ObservableCollection<EntryViewModel>(category.Entries);

                        thePanel.Children.Clear();
                        thePanel.Children.Add(new EntriesUC(allEntries));
                    }
//implementation for all the other list items...
                 }
               }
InformationsquelleAutor | 2014-10-21
Schreibe einen Kommentar