c# - 绑定(bind)列表框到 ObservableCollection<T> 不工作 WPF

标签 c# wpf data-binding listbox observablecollection

我有一个 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 绑定(bind)到表单,因为我有其他文本框绑定(bind)到其他 JobItems(绑定(bind)适用于此)。

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;

这是因为你有下面的绑定(bind)

<Binding Source="{StaticResource jobItemDataSource}" Path="BusinessUnit" Mode="TwoWay"/>

此外,您可以通过......简化绑定(bind)

<my:ValidatingListBox ItemsSource="{Binding BusinessUnit}" ... />

编辑:

如果你真的想要

businessUnitBox.DataContext = item.BusinessUnit;

那么你的绑定(bind)需要是

<my:ValidatingListBox ItemsSource="{Binding Path=." ... />

关于c# - 绑定(bind)列表框到 ObservableCollection<T> 不工作 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727959/

相关文章:

c# - SOAP和证书授权

.net - 如何用给定枚举中的所有项目填充XAML中的WPF组合框?

c# - 如何将多边形绑定(bind)到 WPF 中的现有 PointCollection?

c# - NServiceBus 传奇不起作用

c# - 将富文本框数据格式化存储到数据库

c# - grid view的row命令中如何找到控件呢?

c# - WPF 4 中仍然存在的内存泄漏

wpf - 动画网格背景颜色

c# - ASP.NET MVC3 绑定(bind)到子类

angular - 保留未分配的 Angular 组件 @Input