0

我在列表框内有一个组合框,列表框有一个数据模板,该组合框和其他元素驻留在其中。

<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>

我的疑问是我无法访问列表框的数据模板中存在的组合框,我想从 c# 代码隐藏将列表绑定到组合框

cmbbxbUMselec.DataContext = lstumcods;

以这种方式从后面的代码中,但我无法访问列表框的数据模板中存在的组合框

请让我知道我该如何解决这个问题。

提前致谢

4

2 回答 2

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”添加到您的程序集中,否则它将无法正常工作。现在尝试使用您的“真实”来源并告诉我们它是否有效。

希望能帮助到你。

于 2012-09-11T17:54:27.153 回答
0

如果您不介意在 XAML 中而不是在代码隐藏中执行此操作,那么这里有一个想法。

我假设您的 ListBox 是在 UserControl 内的某个地方定义的,如下所示:

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

如果 lstumcods 是在 UserControl 的代码隐藏中定义的公共属性,那么您可以试试这个:

<ComboBox ItemsSource="{Binding lstumcods, ElementName=MyUserControl" />
于 2012-09-11T16:16:33.993 回答