-1

良い一日、

ユーザーが項目をリストボックスにドラッグできるようにする WPF MVVM アプリケーションがあります。これは初めて正常に機能します。ただし、必要に応じて、より多くのアイテムをリストボックスにドラッグできるようにする必要があります。

        <!-- XAML FileSelectionView.xaml -->
        <ListBox x:Name="listboxFileGroups"
                 ItemsSource="{Binding ImportGroups, Mode=TwoWay}"
                 SelectedItem="{Binding Path=SelectedValue,
                                        Mode=TwoWay}"
                 Style="{StaticResource myListboxStyle}"
                 helper:FocusExtension.IsFocused="{Binding IsImportGroupsFocused}"
                 telerik:RadDragAndDropManager.AllowDrop="True"
                 telerik:RadDragAndDropManager.DropInfo="OnDropInfo"
                 telerik:RadDragAndDropManager.DropQuery="OnDropQuery" />

INotifyPropertyChanged を実装する関連コードを含むビュー モデル (FileSelectionViewModel.cs) を次に示します。

    // This is the data source of the top listbox
    private ObservableCollection<string> importGroups;
    public ObservableCollection<string> ImportGroups
    {
        get 
        {
            System.Diagnostics.Debug.WriteLine("Retrieving Top Level Import Groups...");
            importGroups = fileImportProcess.ImportGroups;
            return importGroups;
        }

        set
        {
            importGroups = value;
            fileImportProcess.ImportGroups = importGroups;
            System.Diagnostics.Debug.WriteLine("Initializing Top Level Import Groups...");
            OnPropertyChanged("ImportGroups");
        }
    }

次に、FileSelectionViewModel.cs はこれらの変更を受け取り、次のような FileImportProcess.cs (これは INotifyPropertyChanged も実装します) というクラスに伝達します。

    // This is the data source for FileSelection
    private ObservableCollection<string> importGroups;
    public ObservableCollection<string> ImportGroups
    {
        get 
        {
            System.Diagnostics.Debug.WriteLine("Retrieving Lower Level Import Groups");
            return parsedFiles.Keys.ToList().ToObservableCollection<string>();
        }
        set
        {
            importGroups = value;
            System.Diagnostics.Debug.WriteLine("Initializing Lower Level Import Groups");
            foreach (var item in importGroups)
            {
                System.Diagnostics.Debug.WriteLine("==> " + item.ToString());
            }
            OnPropertyChanged("ImportGroups");
        }
    }

私が抱えている問題は、3 つのファイルをリストボックスに初めてドラッグしたときに、すべてが正しく機能することです。さらにファイルをリストボックスにドラッグしようとすると、FileImportProcess.cs クラスは、選択した余分なファイルを認識しますが、イベントを FileSelectionViewModel.cs に伝達しません。これが私のサンプル出力です:

Initializing Lower Level Import Groups
==> Import Group 1
==> Import Group 2
==> Import Group 3

Retrieving Top Level Import Groups...
Retrieving Lower Level Import Groups
Retrieving Top Level Import Groups...
Retrieving Lower Level Import Groups
Retrieving Top Level Import Groups...
Retrieving Lower Level Import Groups

0 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_eNodeB_Funktion_Load_M8000-10.csv
1 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_ENODEB_FUNKTION_LOAD_M8018-22.csv
2 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_ENB_Transport_Load_M8004-11.csv
3 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_EUTRAN_RELATION_HO_M8015-20.csv
4 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_EUTRANCELL_BEARER_M8007-13.csv
5 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_EUTRANCELL_ENB_HO_M8009-15.csv
6 - C:\Dropbox\Dropbox-Logs\NSN_2013_02_20_EUTRANCELL_HO_M8021-24.csv

Initializing Lower Level Import Groups
==> Import Group 1
==> Import Group 2
==> Import Group 3
==> Import Group 4
==> Import Group 5
==> Import Group 6
==> Import Group 7

ご覧のとおり、初めてファイルをドラッグすると、ViewModel は ImportGroups を取得します。追加のファイルを 2 回目にドラッグすると、入力ファイルを受け取りますが、リストボックスが正しく更新されません。

編集*** 出力ウィンドウに何も表示されず、データバインディングに問題があることを示しています***

何か案は?

ティア、

コソン

4

1 に答える 1

0

試すItemsSource="{Binding ImportGroups, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"

于 2013-06-27T05:42:13.183 に答える