2012-09-11 28 views
0

我有一個組合框出現在列表框中,listbox有一個數據模板,其中包含此組合框和其他元素所在的數據模板。在metro應用程序後面的c#代碼中訪問列表框的Datatemplate中的ComboBox?

<ListBox x:Name="lstbxbProducts" HorizontalAlignment="Left" Height="547" Margin="0,221,0,0" VerticalAlignment="Top" Width="1044" RenderTransformOrigin="0.600000023841858,0.5"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <StackPanel Width="80" Orientation="Horizontal"> 
          <TextBlock Text="{Binding prdnum}" VerticalAlignment="Center" HorizontalAlignment="Left" ></TextBlock>  
          <TextBlock Text=" -" VerticalAlignment="Center" HorizontalAlignment="Left" ></TextBlock> 
         </StackPanel> 
         <StackPanel Width="400"> 
          <TextBlock Text="{Binding prddsc}" VerticalAlignment="Center" HorizontalAlignment="Left" ></TextBlock> 
         </StackPanel> 
         <StackPanel Width="300"> 
          <ComboBox Name="cmbbxbUMselec" ItemsSource="{Binding}" Width="200" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center" ></ComboBox> 
         </StackPanel> 
         <StackPanel Width="180"> 
          <TextBlock Text="{Binding prcby_prc}" VerticalAlignment="Center" HorizontalAlignment="Center" ></TextBlock> 
         </StackPanel> 
         <StackPanel Width="100"> 
          <TextBox Text="{Binding stdordqty, Mode=TwoWay}" VerticalAlignment="Center" TextAlignment="Center"      HorizontalAlignment="Right" ></TextBox> 
         </StackPanel> 

        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

我的疑問是,我不能夠訪問存在內部組合框列表框的DataTemplate中, 我想以這種方式綁定列表,從C#代碼隱藏

cmbbxbUMselec.DataContext = lstumcods; 

組合框從後面的代碼,但我不能訪問列表框中的數據模式下的組合框

請讓我知道我該如何解決這個問題。

在此先感謝

+0

是否有你想從代碼隱藏設置ComboBox的原因?你會接受一個涉及XAML中不同綁定的解決方案嗎? – Andrew

回答

0

試試這個:

我第一次改變了你的列表框此:

<ListBox x:Name="lstbxbProducts" HorizontalAlignment="Left" Height="547" Margin="0,221,0,0" VerticalAlignment="Top" Width="1044" RenderTransformOrigin="0.600000023841858,0.5"> 
     <ListBox.Resources> 
      <ComboBox x:Key="myComboBox" Name="cmbbxbUMselec" ></ComboBox> 
     </ListBox.Resources>   
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <StackPanel Width="80" Orientation="Horizontal"> 
         <TextBlock Text="{Binding prdnum}" VerticalAlignment="Center" HorizontalAlignment="Left" ></TextBlock>  
         <TextBlock Text=" -" VerticalAlignment="Center" HorizontalAlignment="Left" ></TextBlock> 
        </StackPanel> 
        <StackPanel Width="400"> 
         <TextBlock Text="{Binding prddsc}" VerticalAlignment="Center" HorizontalAlignment="Left" ></TextBlock> 
        </StackPanel> 
        <StackPanel Width="300"> 
         <ComboBox Name="cmbbxbUMselec" ItemsSource="{Binding Source={StaticResource myComboBox}, Path=ItemsSource, Mode=TwoWay}" 
            Width="200" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center" ></ComboBox> 
        </StackPanel> 
        <StackPanel Width="180"> 
         <TextBlock Text="{Binding prcby_prc}" VerticalAlignment="Center" HorizontalAlignment="Center" ></TextBlock> 
        </StackPanel> 
        <StackPanel Width="100"> 
         <TextBox Text="{Binding stdordqty, Mode=TwoWay}" VerticalAlignment="Center" TextAlignment="Center"      HorizontalAlignment="Right" ></TextBox> 
        </StackPanel> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

請注意,我已在您的listbox.resources中添加了一個項目。

在代碼隱藏我已經添加以下代碼:

  var cb = lstbxbProducts.Resources.FirstOrDefault(c => c.Key.ToString() == "myComboBox"); 
     ((ComboBox)cb.Value).ItemsSource = new List<string> { "A", "B", "C" }; 

不要忘了「System.Linq的」添加到您的程序集,否則將無法正常工作。 現在嘗試與您的「真實」來源,並告訴我們,如果它的工作。

希望它有幫助。

+0

感謝它的作品像一個魅力:)非常感謝 – user1516781

0

如果你不介意在XAML做它,而不是代碼隱藏,這裏是一個想法。

我假設你的列表框是一個用戶控件內的某處定義的,就像這樣:

<UserControl x:Name="MyUserControl"> 
    <!-- Other elements here --> 
    <ListBox x:Name="lstbxbProducts"> 
     <ListBox.ItemTemplate> 
      <!-- etc... --> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</UserControl> 

如果lstumcods是在用戶控件的代碼隱藏定義的公共財產,那麼你可以試試這個:

<ComboBox ItemsSource="{Binding lstumcods, ElementName=MyUserControl" /> 
+0

感謝您的回覆 – user1516781

相關問題