0

次のコードを含むコンストラクターにバインドされた ListBox の ItemsSource プロパティ、ViewModel 内にSystem.Windows.ListBoxバインドされている があります。ObservableCollection<string>LbItems

public DataSetViewModel(DataSetModel _dataSet) {
    LbItems.CollectionChanged += lbFiles_CollectionChanged2;
}

以下の 2 つの可能なシナリオ オプションを考慮して....

期待どおりに表示されます ( OpenFileDialogListBox 内の等しい項目から設定された項目):

private void lbFiles_CollectionChanged2(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) {
        this.DataSet.InputFileSet = LbItems.ToArray(); 
}

項目は exepcted として表示されません ( OpenFileDialogListBox に表示される項目から選択された各項目の 2 つ):

private void lbFiles_CollectionChanged2(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) {
        MessageBox.Show("Why does this messagebox cause an binding error?");
}

.

アップデート

以下は、OpenFileDialog のコードです。

private void btnLoad__Click(object sender, RoutedEventArgs e) {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Multiselect = true;
        ofd.Filter = "CSV File (.csv)|*.csv";
        ofd.InitialDirectory = @"%userprofile%\Documents";
        ofd.Title = "Load CSV data sources";

        if (ofd.ShowDialog() == true) {
            ((DataSetViewModel)this.DataContext).LbItems.Clear(); //bad code - please comment on proper strucutre for MVVM 

            foreach (string str in ofd.FileNames) {
                ((DataSetViewModel)this.DataContext).LbItems.Add(str);
            }

        }
    }
4

0 に答える 0