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

コードビハインドではなく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 に答える
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 に答える