Silverlight:如何在ListBox ItemTemplate中动态绑定ComboBox?

发布于 2024-08-04 08:49:52 字数 447 浏览 5 评论 0原文

我有一个列表框,至少需要一个组合框。我找不到将 ComboBox 放置在我使用的 ItemTemplate 中的方法。

... 
<DataTemplate x:Key="parts_template">
  <StackPanel Orientation="Horizontal">
    <TextBlock .../>
    <ComboBox .../>
  </StackPanel>
</DataTemplate>

...
<ListBox x:Name="lb_parts" ItemTemplate="{StaticResource parts_template}" .../>
...

如何将 DataTemplate 中的 ComoBox 绑定到后面代码中的 ObservableCollection?

I have a list box that requires at least one ComboBox. I couldn't find a way to place the ComboBox in the ItemTemplate I use.

... 
<DataTemplate x:Key="parts_template">
  <StackPanel Orientation="Horizontal">
    <TextBlock .../>
    <ComboBox .../>
  </StackPanel>
</DataTemplate>

...
<ListBox x:Name="lb_parts" ItemTemplate="{StaticResource parts_template}" .../>
...

How do bind that ComoBox in the DataTemplate to an ObservableCollection in the code behind?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

舞袖。长 2024-08-11 08:49:52

您可以尝试的另一件事是订阅 ComboBox 上的 Loaded 事件。
然后您可以将EventHandler中的ComboBox.ItemsSource设置为MyObservableCollection。

看看

XAML:

<DataTemplate x:Key="parts_template">
  <StackPanel Orientation="Horizontal">
    <TextBlock .../>
    <ComboBox Loaded="ComboBox_OnLoaded">
        <!-- ComboBox ItemTemplate -->
    </ComboBox>
  </StackPanel>
</DataTemplate>

C# 代码背后:

private void ComboBox_OnLoaded(object sender, EventArgs e)
{
    ((ComboBox)sender).ItemsSource = MyObservableCollection;
}

Another thing you could try is subscribe the Loaded event on the ComboBox.
Then you can set the ComboBox.ItemsSource in the EventHandler to MyObservableCollection.

Have a look

XAML:

<DataTemplate x:Key="parts_template">
  <StackPanel Orientation="Horizontal">
    <TextBlock .../>
    <ComboBox Loaded="ComboBox_OnLoaded">
        <!-- ComboBox ItemTemplate -->
    </ComboBox>
  </StackPanel>
</DataTemplate>

C# Code Behind:

private void ComboBox_OnLoaded(object sender, EventArgs e)
{
    ((ComboBox)sender).ItemsSource = MyObservableCollection;
}
疯到世界奔溃 2024-08-11 08:49:52

好的,这是如何在后面的代码中将 ComboBox 添加到 ListBox 的方法。

创建 ComboBox

ComboBox x = new ComboBox();

如果您有一个填充 ComboBox 的数据源,那么您可以直接绑定该数据

x.ItemsSource = e.Result;

源 如果您没有并且想要手动将项目添加到 ComboBox:

ComboBoxItem y = new ComboBoxItem();

将项目的内容设置为您想要在 ComboBox 中显示的内容

y.Content = "Hello";

现在全部完成剩下的,就是将 ComboBoxItem 添加到 ComboBox(仅当您手动创建 Items 时),然后将 ComboBox 添加到 ListBox

x.Items.Add(y);

//testing is my ListBox
testing.Items.Add(x);

Okay, here is how you can add a ComboBox to the ListBox in the code behind.

Create a ComboBox

ComboBox x = new ComboBox();

If you have a data source that populates the ComboBox then you can just bind that

x.ItemsSource = e.Result;

If you do not and want to manually add items to the ComboBox:

ComboBoxItem y = new ComboBoxItem();

Set the Content of the Item to what you want displayed in the ComboBox

y.Content = "Hello";

Now all that is left, is to add the ComboBoxItem to the ComboBox (only if you are creating the Items manually), and then the ComboBox to the ListBox

x.Items.Add(y);

//testing is my ListBox
testing.Items.Add(x);
沦落红尘 2024-08-11 08:49:52

您应该能够将数据上下文设置为列表本身

lb_Parts.DataContext=myCollection;

然后您应该能够在模板中绑定到它

<DataTemplate x:Key="parts_template">
   <StackPanel Orientation="Horizontal">
     <TextBlock .../>
     <ComboBox ItemSource={Binding}/>
   </StackPanel>
</DataTemplate>

You should be able to set the data context to the List itself

lb_Parts.DataContext=myCollection;

Then you should be able to bind to it in the template

<DataTemplate x:Key="parts_template">
   <StackPanel Orientation="Horizontal">
     <TextBlock .../>
     <ComboBox ItemSource={Binding}/>
   </StackPanel>
</DataTemplate>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文