WPF ComboBox itemssource-Bindung an verschiedene datacontext in MVVM

Habe ich ein Benutzer-Steuerelement, dessen datacontext gesetzt, um ein view-Modell genannt EmployeeList_VM. Dann habe ich ein ContentControl in das Benutzer-Steuerelement, dessen datacontect festlegen, um eine öffentliche Eigenschaft (EmployeeSelection) der view-Modell. Das ContentControl ist datacontext ist das gleiche wie das ausgewählte Objekt verbindlich an eine listbox in der gleichen Benutzer-Steuerelement.

Ich möchte eine combobox (eine observblecollection genannt EmployeeStatus) innerhalb der ContentControl binden seine selecteditem eine Eigenschaft des EmployeeSelection datacontext des ContentControl. Ich will, dass die itemssource für die combobox zu binden, um eine öffentliche Eigenschaft EmployeeStatus der "Eltern" - viewmodel EmployeeList_VM.

Bekomme ich eine Liste der Mitarbeiter-status angezeigt wihtin der combobox. Ich kann nicht mehr zu binden, um die Abschnitt-Eigenschaft des EmployeeSelection.

Hier ist Was ich bisher (einige code zur besseren Lesbarkeit entfernt):

<UserControl x:Class="FTC.View.EmployeeListView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
            xmlns:local="clr-namespace:FTC_Application"
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
            xmlns:cmd="http://www.galasoft.ch/mvvmlight"
            mc:Ignorable="d" 
            DataContext="{Binding EmployeeList_VM, Source={StaticResource Locator}}"
            d:DesignHeight="900" d:DesignWidth="1000">

        <Expander x:Name="DetailExpander" Grid.Column="2" Header="employee detail" Style="{DynamicResource ExpanderStyle_FTC}" IsExpanded="True" Padding="8,0,0,10" >
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <StackPanel Orientation="Vertical" HorizontalAlignment="Left" >
                    <Button Content="" Style="{DynamicResource ButtonSave}" Command="{Binding SaveCommand}" ToolTip="Save Changes" Margin="0,0,10,10"/>
                    <Button Content="" Style="{DynamicResource ButtonUndo}" Command="{Binding UndoCommand}" ToolTip="Undo Changes" Margin="0,0,10,10"/>
                </StackPanel>
                <ScrollViewer Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <ContentControl DataContext="{Binding Path=EmployeeSelection, Mode=TwoWay}" >
                            <!-- FTC SETTINGS GRID CONTENT-->
                            <Grid Grid.ColumnSpan="6" Grid.Row="1">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="30"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>

                                <TextBlock x:Name="SettingsHeading" Text="FTC Settings" Style="{StaticResource FTC_DetailHeading}" Grid.ColumnSpan="5"/>

                                <TextBlock Text="Status" Style="{StaticResource FTC_DetailLabelSub}" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1"/>
                                <ComboBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2"
                                          Margin="5,5,16,5" Height="37"
                                          ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.EmployeeStatus}"
                                          SelectedItem="{Binding idStatus, Mode=TwoWay}"
                                          SelectedValuePath="idStatus"
                                          DisplayMemberPath="chrCode" FontSize="18"/>

                           </Grid>
                    </ContentControl>
                </ScrollViewer>
            </Grid>
        </Expander>
</UserControl>

Ich sogar versucht, Folgendes zu ändern (ich nannte das ContentControl DetailControl) für den ausgewählten Eintrag der combobox:

SelectedItem="{Binding ElementName=DetailControl, Path=DataContext.idStatus}"

Kann jemand bitte mir helfen, das ausgewählte Objekt verbindlich angeschlossen richtig. Die combobox zeigt alle richtige Elemente, aber Sie verbinden sich nicht mit den EmployeeSelection.idStatus.

Vielen Dank im Voraus.

Ich denke, wenn Sie entfernen SelectedValuePath="idStatus" sollten Sie bekommen, was Sie suchen. Wollte nicht den post diesen Kommentar als eine Antwort, denn ich habe nicht getan, eine Menge von due diligence-nur Blick auf Ihre XAML. Hast du es versucht?

InformationsquelleAutor J King | 2013-02-08

Schreibe einen Kommentar