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にバインドされている他のテキストボックスがあるため、JobItemをフォームにバインドしています(バインドはこれで機能します)。

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);
        }

    }

これで、プログラムを実行すると、ビジネスユニットを追加するたびに、リストボックスに表示されません。これをどのように機能させることができるかについて、ある種のサンプルコードを教えてください。ありがとう。

4

1 に答える 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=." ... />
于 2012-05-23T21:21:54.263 に答える