次のコードを含むコンストラクターにバインドされた ListBox の ItemsSource プロパティ、ViewModel 内にSystem.Windows.ListBox
バインドされている があります。ObservableCollection<string>
LbItems
public DataSetViewModel(DataSetModel _dataSet) {
LbItems.CollectionChanged += lbFiles_CollectionChanged2;
}
以下の 2 つの可能なシナリオ オプションを考慮して....
期待どおりに表示されます ( OpenFileDialog
ListBox 内の等しい項目から設定された項目):
private void lbFiles_CollectionChanged2(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) {
this.DataSet.InputFileSet = LbItems.ToArray();
}
項目は exepcted として表示されません ( OpenFileDialog
ListBox に表示される項目から選択された各項目の 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);
}
}
}