来自代码隐藏的 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 ???}"
中输入什么才能显示我的字符串内容?
因为_materials
是string
的列表,所以这意味着每个项目都是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}"
即可。