3

怪奇現象に遭遇。Web 検索をたくさん行った場合、解決策が得られません。私はWPF、VS2010エンジンを使用しています。GUI は、主に 4 つの ListBox で構成されています。

最初の ListBox はマートの支店の集合であり、2 番目の ListBox はマートが販売する果物、肉、野菜などの商品の集合です。3つ目のListBoxはマートグッズの一種です。(リンゴ、桃、ピア、メロン...) 4 番目の ListBox は、選択された果物の種類の集合です。たとえば、リンゴを選択すると、コートランド、クラブアップル、サンサ、ガラなどです。

プログラムを起動すると、1番目のリストボックスにオールマートの店舗が表示され、1つの店舗を選択すると、2番目のリストボックスにマートで販売されている商品リストが表示されます。

同様に、3 番目の ListBox と 4 番目の ListBox には、選択された項目のサブ種類が表示されます。

1 番目、2 番目、4 番目の ListBox は正常ですが、3 番目の ListBox にエラーがあります。2番目と3番目は同じ構造だと思います。

3 番目の ListBox は、選択された項目の変更を更新できません。SelectionMode (Single、Multiple、Extend) に関係なく、3 番目の ListBox の SelectedItems には、選択したすべての項目があります。さらに、3 番目の ListBox.SelectedItems には重複したアイテムが含まれています。

しかし、SelectionChanged イベントの発火は良いことです。SelectedItems または SelectedItem のみが問題です。

現在、この関数を作成するには、迂回方法を使用しています。SelectionChanged を起動した後、SelectionChangedEventArgs の AddedItems をキャッチします。したがって、SelectedItem の代わりに、SelectionMode = "Single" のように AddedItems を使用します。

多くの提案、VirtualizingStackPanel.IsVirtualizing="False"、IsSynchronizedWithCurrentItem="True" を試しましたが、解決策が見つかりません。申し訳ありませんが、すべてのビハインド コードと ~ xaml を提供することはできません。実際、このアプリケーションは非常に大きいです。だから、私はそれをすることはできません。

そして、申し訳ありませんが、私の英語力は貧弱です。

支店

            <StackPanel Orientation="Vertical" Grid.Column="0">
                <Label HorizontalAlignment="Center">Goods</Label>
                <ListBox Name="lbLoadedGoods" Height="120" Margin="2" SelectionMode="Single" SelectionChanged="lbLoadedGoods_SelectionChanged"></ListBox>
            </StackPanel>
            <StackPanel Orientation="Vertical" Grid.Column="1" >
                <Label HorizontalAlignment="Center">ITEM</Label>
                <!-- ListBox Double Click Event Setter -->
                <ListBox Name="lbLoadedItems" Height="120" Margin="2" SelectionMode="Single" SelectionChanged="lbLoadedItems_SelectionChanged">
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem }}">
                            <EventSetter Event="MouseDoubleClick" Handler="lbLoadedItems_MouseDoubleClick"></EventSetter>
                        </Style>
                    </ListBox.ItemContainerStyle>
                </ListBox>
            </StackPanel>
        </Grid>
    </GroupBox>

    <Label Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center">SubItem</Label>
    <ListBox Name="lbSelectedSubItemData" Height="80" Grid.Column="0" Grid.Row="1" Margin="4">
        <!-- ListBox Double Click Event Setter -->
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <EventSetter Event="MouseDoubleClick" Handler="lbSelectedSubItemData_MouseDoubleClick"></EventSetter>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>


</StackPanel>





   // public ObservableCollection<string> BranchList { get; private set; }
   // public ObservableCollection<Goods> GoodList { get; private set; }
   // public ObservableCollection<Items> ItemList { get; private set; }
   // private ObservableCollection<string> m_usbitemlist = new ObservableCollection<string>();
   // public ObservableCollection<string> SubItemList { get { return m_usbitemlist; } private set { m_usbitemlist = value; } }


    private void BindFabFileList()
    {
        lbBranches.ItemsSource = BranchList;
        lbLoadedGoods.ItemsSource = GoodList;
        lbLoadedItems.ItemsSource = ItemList;
    }

    private void lbLoadedGoods_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        ItemList = new ObservableCollection<Items>();

        // ItemList Add. From Selected Goods
    }
4

1 に答える 1

1

WPF が既に接続されているリストの項目を更新するのではなく、オブジェクト ItemList への参照を新しいインスタンスに設定しています。WPF は、ObservableCollection の CollectionChanged イベントに自動的に接続しますが、コード ビハインドで参照が変更されたことを認識しません。UI はメモリ内の古いオブジェクトにまだ接続されています。

それ以外の:

ItemList = new ObservableCollection<Items>();
ItemList.Add(...);

これを行う:

ItemList.Clear();
ItemList.Add(...);
于 2013-10-21T17:33:43.563 に答える