来自代码隐藏的 WPF 组合框数据绑定

本文关键字:组合 数据绑定 WPF 代码 隐藏 | 更新日期: 2023-09-27 18:33:44

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

我需要从后面的代码在 Part 中创建数据绑定,因为我是通过后台工作线程填充_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>

我的_materials列表中的每个条目都显示"Hi",但不显示实际名称。那么我需要在Text="{Binding ???}"中输入什么才能显示我的字符串内容?

来自代码隐藏的 WPF 组合框数据绑定

因为_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=.}"。

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