3

JobItems を追跡するアプリケーションを作成しようとしています。アプリケーションで、ユーザーは「New Job」ボタンをクリックして JobItem を作成します。新しいウィンドウ (NewJobWindow) がポップアップし、ユーザーはジョブに関する情報を入力する必要があります。必要な情報のいくつかは、複数の値を持っています。たとえば、ジョブ アイテム内に複数の (文字列) ビジネス ユニットを追加できます。私が行ったことは、ユーザーがその中にすべてのビジネス ユニットを追加するためのリスト ボックスを追加することです。方法がわからないのは、このビジネスユニットのリストボックスをバインドして、アイテムを追加するたびに、送信ボタンをクリックすると JobItem の監視可能なコレクション BusinessUnits に同じアイテムが追加されるようにすることです。データバインディングを使用してこれを行う方法を知る必要があります。同様の回答を探すためにGoogleを検索しましたが、何も見つかりませんでした。

編集

これは、ユーザーが NewJobWindow で複数の BusinessUnits を送信するたびに更新する必要がある JobItem クラスにあるものです。

public ObservableCollection<string> BusinessUnit
    {
        get { return businessUnit; }
        set
        {
            if(!BusinessUnit.Equals(value))
            {
                businessUnit = value;
                OnPropertyChanged("BusinessUnit");
            }
        }

    }

これは、リストボックス内にビジネスユニットを追加するための xaml での 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>
4

1 に答える 1

6

バインディングは非常に単純です。

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

ここで、MyCollection は ObservableCollection タイプのプロパティです。ListBox に項目を追加してコレクションに追加する必要はありません。あとはデータ バインディングが行います。

于 2012-05-18T20:59:47.897 に答える