将列表框绑定到 ObservableCollection 不起作用 WPF
本文关键字:不起作用 WPF ObservableCollection 列表 绑定 | 更新日期: 2023-09-27 18:35:04
我有一个 JobItem 对象,里面有:
public ObservableCollection<string> BusinessUnit
{
get
{
return businessUnit;
}
set { businessUnit = value; }
}
现在,用户需要填写表单并添加多个业务部门。 我创建了一个列表框,旁边有添加和删除按钮。 添加按钮将打开一个对话框,提示用户添加业务部门的名称,然后将其添加到列表框中。 这是我为此编写的代码:
<my:ValidatingListBox Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="5" Grid.RowSpan="1" x:Name="businessUnitBox" SelectionMode="Multiple" SelectionChanged="ValidatingListBox_SelectionChanged" IsSynchronizedWithCurrentItem="True">
<my:ValidatingListBox.ItemsSource>
<Binding Source="{StaticResource jobItemDataSource}" Path="BusinessUnit" Mode="TwoWay"/>
</my:ValidatingListBox.ItemsSource>
</my:ValidatingListBox>
<Button Style="{StaticResource addBtnStyle}" Grid.Column="2" Grid.Row="5" Name="addBusinessUnitBtn" Click="addBusinessUnitBtn_Click" />
<Button Style="{StaticResource removeBtnStyle}" Grid.Column="2" Grid.Row="5" Name="delBusinessUnitBtn" Click="delBusinessUnitBtn_Click" />
在隐藏的代码中,我将 JobItem 绑定到窗体,因为我有其他文本框绑定到其他 JobItems(绑定适用于此)。
public NewJobDialog(int workOrderCounter)
{
InitializeComponent();
item = new JobItem();
base.DataContext = item();
businessUnitBox.DataContext = item.BusinessUnit;
}
然后,当我单击添加按钮以添加业务部门时,我有以下代码:
private void addBusinessUnitBtn_Click(object sender, RoutedEventArgs e)
{
AddBusinessUnitDialog addBusinessUnit = new AddBusinessUnitDialog();
addBusinessUnit.ShowDialog();
if (addBusinessUnit.DialogResult == true)
{
item.BusinessUnit.Add(addBusinessUnit.BusinessUnit());
}
}
private void delBusinessUnitBtn_Click(object sender, RoutedEventArgs e)
{
if (businessUnitBox.Items.Count > 0)
{
item.BusinessUnit.Remove((string)businessUnitBox.SelectedItem);
}
}
现在,当我运行该程序时,每次添加业务部门时,它都不会显示在列表框中。 请给我一些类型的示例代码,说明我如何能够使其工作。 谢谢。
我相信
这是因为您需要将 DataContext 设置为父类。
businessUnitBox.DataContext = item;
这是因为您具有以下绑定
<Binding Source="{StaticResource jobItemDataSource}" Path="BusinessUnit" Mode="TwoWay"/>
此外,您可以通过具有以下功能来简化绑定。
<my:ValidatingListBox ItemsSource="{Binding BusinessUnit}" ... />
编辑:
如果你真的想要
businessUnitBox.DataContext = item.BusinessUnit;
那么你的绑定需要
<my:ValidatingListBox ItemsSource="{Binding Path=." ... />