来自Code Behind的WPF ComboBox数据绑定

时间:2014-12-09 10:44:15

标签: c# wpf xaml data-binding combobox

在后面的代码中我有一个private List<string> _materials我想在一个combox中显示。

我需要在代码的部件中创建数据绑定,因为我通过后台工作人员填充_materials

public partial class MainWindow : Window
{

    private List<string> _materials;

    public MainWindow()
    {
        InitializeComponent();


    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        BackgroundWorker worker = new BackgroundWorker();
        worker.RunWorkerCompleted += worker_RunWorkerCompleted;
        worker.DoWork += worker_DoWork;
        worker.RunWorkerAsync();
    }

    void worker_DoWork(object sender, DoWorkEventArgs e)
    {         

        _materials = DataSupplier.GetMaterials();
    }

    void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        //Do Databinding Here

        wpMaterial.DataContext = _materials;
        cmbMaterial.ItemsSource = _materials;      


    }

XAML看起来像这样:

<WrapPanel x:Name="wpMaterial" >
                            <Label  Content="Material: " FontStyle="Italic" FontFamily="Arial" Foreground="Black" Background="{x:Null}" Width="100" />
                            <ComboBox Name="cmbMaterial">
                                <ComboBox.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding Path=Name}" />
                                            <TextBlock Text="Hi" />
                                        </StackPanel>
                                    </DataTemplate>
                                </ComboBox.ItemTemplate>
                            </ComboBox>
                        </WrapPanel>

&#34;您好&#34;显示我_materials列表中的每个条目,但不显示实际名称。那么我需要在Text="{Binding ???}"中放置什么才能显示我的字符串内容?

2 个答案:

答案 0 :(得分:2)

由于_materialsstring的列表,因此每个项目都属于string类型,因此您希望绑定到DataContext的当前ComboBoxItem

您可以使用{Binding}{Binding Path=.}

<DataTemplate>
   <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding}" />
      <TextBlock Text="Hi" />
   </StackPanel>
</DataTemplate>

来自MSDN

  

可选地,句点(。)路径可用于绑定到当前源。例如,Text =“{Binding}”相当于Text =“{Binding Path =。}”。

答案 1 :(得分:1)

由于您绑定的ItemsSource只是一个字符串集合,您只需指定Text="{Binding}"