在WPF中将ListBox绑定到一个类型为字符串的ObservableCollection

3
我正在尝试创建一个跟踪工作项的应用程序。在该应用程序中,用户单击“新工作”按钮以创建作业项。然后会弹出一个新窗口(NewJobWindow),用户必须填写有关该工作的信息。需要一些信息具有多个值。例如,您可以在作业项中添加多个(字符串)业务单元。我做的是添加一个列表框,让用户将所有业务单元添加到其中。我不知道如何将此业务单元列表框绑定,以便每次我在其中添加项目时,当我单击提交按钮时,作业项中的Observable Collection BusinessUnits也会添加相同的项目。我需要知道如何使用数据绑定来实现这一点。我已经搜索了谷歌寻找类似的答案,但没有找到任何结果。
编辑:
这是我JobItem类中需要每次更新的内容,当用户在NewJobWindow中提交多个BusinessUnit时:
public ObservableCollection<string> BusinessUnit
    {
        get { return businessUnit; }
        set
        {
            if(!BusinessUnit.Equals(value))
            {
                businessUnit = value;
                OnPropertyChanged("BusinessUnit");
            }
        }

    }

以下是在xaml中添加业务单元到listbox中的JobWindow外观。我创建了ValidatingListBox,以便验证用户是否已在列表框中插入项目:

<Label Grid.Column="0" Grid.Row="5">Business Unit:</Label>
        <my:ValidatingListBox Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="5" Grid.RowSpan="1" x:Name="businessUnitBox" SelectionMode="Multiple" SelectionChanged="ValidatingListBox_SelectionChanged" ItemsSource="{Binding Path=BusinessUnit}" >
        <my:ValidatingListBox.ValidationListener>
                <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}" Path="BusinessUnit" Mode="TwoWay">
                <Binding.ValidationRules>
                    <my:ListBoxValidationRule ValidatesOnTargetUpdated="True" ></my:ListBoxValidationRule>
                </Binding.ValidationRules>
            </Binding>
        </my:ValidatingListBox.ValidationListener>
    </my:ValidatingListBox>
1个回答

6

绑定非常简单:

<ListBox ItemsSource="{Binding MyCollection}" />  

其中MyCollection是ObservableCollection类型的属性。您不需要将项目添加到ListBox中,添加到集合中,数据绑定会自动完成其余操作。


用户需要一个UI来在窗口中添加业务单元,这就是为什么我需要在列表框中添加项目,然后需要更新对象内的集合。如何引用JobItem对象内的集合?请检查我的编辑,也许您会更好地理解我要做什么。 - Erika
@Erika,我强烈建议你了解MVVM模式。UI只是一种展示方式。逻辑(例如“添加业务单元”)必须驻留在视图模型中,而不是视图(UI)。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接