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

时间:2009-09-08 17:51:25

标签: silverlight combobox listbox datatemplate

我有一个列表框,至少需要一个ComboBox。我找不到将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?

3 个答案:

答案 0 :(得分:3)

您可以尝试的另一件事是订阅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;
}

答案 1 :(得分:0)

好的,以下是如何在后面的代码中向ListBox添加ComboBox。

创建一个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);

答案 2 :(得分:0)

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

lb_Parts.DataContext=myCollection;

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

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