how to apply multiple datacontext in xaml?

Viewed 3091

I have multiple viewmodels. I used three datatemplates for three listboxes which are binded with 3 comboxes and their selected items. But my problem is, only one datacontext works perfectly. i.e., if i wrote code like

 public MainWindow()
        {           
            InitializeComponent();
            DataContext = new wbItemViewModel();
            DataContext = new IfItemViewModel();                         
        }

 <Window.Resources>     

     <DataTemplate x:Key="wbObjectsDataTemplate">
        <Grid>               

            <ItemsControl Grid.ColumnSpan="4" Grid.RowSpan="4" Height="24" Width="642" >
                <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="697"  Margin="10,0,0,0" Height="54" >  
                    <Label Content="{Binding WBName_lbl}" Margin="0,3,0,5" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"/>               

                    <ComboBox x:Name="wbselect"  Margin="5,0,10,1" Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="0">
                        <ComboBoxItem x:Name="wbstraight" IsSelected="True" Content="straight"></ComboBoxItem>
                        <ComboBoxItem x:Name="wbtapered" Content="tapered"></ComboBoxItem>
                    </ComboBox>


                    <TextBox x:Name="wbDesc" Margin="18,0,20,1" Grid.Column="2" Grid.Row="0">
                    </TextBox>

                    <Label x:Name="wblengthvalue" Margin="247,0,54,5" FontSize="8" Grid.Row="1" Grid.Column="2"/>



                </Grid>
            </ItemsControl>
            <!--</GroupBox>-->
        </Grid>
    </DataTemplate>

    <DataTemplate x:Key="ifObjectsDataTemplate">
        <Grid>               
            <ItemsControl Grid.ColumnSpan="4" Grid.RowSpan="4" Height="24" Width="642" >
                <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="697"  Margin="10,0,0,0" Height="54" >                      

                    </Grid.RowDefinitions>

                    <Label Content="{Binding IFName_lbl}" Margin="0,3,0,5" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"/>                       

                    <ComboBox x:Name="ifselect"  Margin="5,0,10,1" Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="0">
                        <ComboBoxItem x:Name="ifstraight" IsSelected="True" Content="straight"></ComboBoxItem>
                        <ComboBoxItem x:Name="iftapered" Content="tapered"></ComboBoxItem>
                    </ComboBox>

                    <TextBox x:Name="ifDesc" Margin="18,0,20,1" Grid.Column="2" Grid.Row="0">
                    </TextBox>

                    <Label x:Name="iflengthvalue" Margin="247,0,54,5" FontSize="8" Grid.Row="1" Grid.Column="2"/>



                </Grid>
            </ItemsControl>                
        </Grid>
    </DataTemplate>

    </Window.Resources>
     <ComboBox x:Name="wbCombo" ItemsSource="{Binding wbComboBoxList}" SelectedItem="{Binding wbSelectedComboIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Height="20" Width="92" SelectedIndex="4" Canvas.Left="102" Canvas.Top="19"/>                       
                            <ComboBox x:Name="ifCombo" ItemsSource="{Binding ifComboBoxList}"  SelectedItem="{Binding ifSelectedComboIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="20" Width="92" SelectedIndex="4"
     Canvas.Left="302" Canvas.Top="19" />
     <ListBox x:Name="wbListDataTemplate" ItemsSource="{Binding wbVisibleItems}"           
          ItemTemplate="{DynamicResource wbObjectsDataTemplate}"
           Background="{x:Null}" 
SelectedItem="{Binding wbSelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True" Canvas.Top="51" Height="153" Width="655">
                            </ListBox>
    <ListBox x:Name="ifListDataTemplate"  ItemsSource="{Binding ifVisibleItems}"             
    ItemTemplate="{DynamicResource ifObjectsDataTemplate}"
                                      Background="{x:Null}"
                                     SelectedItem="{Binding ifSelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                     IsSynchronizedWithCurrentItem="True" Canvas.Top="203" Height="153" Width="655">
                            </ListBox>
</Window>

Only the last DataContext is visible. Or if I write only one single DataContext, only that one is appeared on my screen. I have tried different solutions in stackoverflow but no use. pls help.

1 Answers
Related