首页 文章

将Listbox绑定到ObservableCollection <T>不能正常工作WPF

提问于
浏览
1

我有一个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);
        }

    }

现在,当我运行程序时,每次添加业务单位时,它都不会显示在列表框中 . 请给我一些类型的示例代码,以便我能够如何使其工作 . 谢谢 .

1 回答

  • 4

    我相信这是因为您需要将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=." ... />
    

相关问题