0

リストボックスを使用して、アップロードされたファイルのファイル名のリストを表示しようとしています。リストボックスにファイルをアップロード、開く、削除するボタンがあります。私は mvvm パターンを使用しており、itemsource を監視可能なコレクションにバインドしています。コレクションを変更するたびに(つまり、アップロードまたは削除)、リストボックスが更新されず、コレクションが変更されたときに変更が反映されません。私がこれを実装した方法は悪いと確信しています。この時点で、監視可能なコレクションが変更を通知する方法について完全に混乱しています。以下は私のコードです:

 <ListBox x:Name="Listbox1"    
          SelectedItem="{Binding SelectedFile}" 
          SelectedIndex="{Binding SelectedIndexNum}"
          ItemsSource="{Binding Path=FileNames, UpdateSourceTrigger=PropertyChanged}">                            
 </ListBox>
 <Button Content="UploadFile" 
         Command="{Binding Path=UploadFileCommand}" 
 </Button>

 <Button Content="Delete File" 
         Command="{Binding Path=DeleteFileCommand}" 
 </Button>

ビュー モデル プロパティ:

 public ObservableCollection<string> FileNames
    {
        get
        {
            if (this.SomeDataStruc.UploadedFileDataCollection == null || this.SomeDataStruc.UploadedFileDataCollection .Count() <= 0)
            {
                return new ObservableCollection<string>();
            }
            else
            {
                var uploadedFileList = this.SomeDataStruc.UploadedFileDataCollection .Where(r => r.Id == this.SomeDataStruc.Id);
                var filenames = new ObservableCollection<string>(uploadedFileList.Select(c => c.FileName));//.ToList();
                return filenames;
            }
        }          
    }

SomeDataStruc には監視可能なコレクションがあることに注意してください。この UploadedFileData には多くのフィールドがあり、リストボックスにファイル名のみを表示しています。

 private void DeleteReport(object parameter)
    {
        this.UploadedFileDataCollection[_selectedIndex].Status = DataStatusEnum.Deleted;

        this.SomeDataStruc.UploadedFileDataCollection.RemoveAt(_selectedIndex);


        this.OnPropertyChanged("FileNames"); // i need to do this...Listbox doesnt update without this.


    }

私は何を間違っていますか。collectionchanged イベントを処理する必要がありますか? もしそうなら、なぜですか?それは監視可能なコレクションのポイントではありません....それはそれ自体で通知しますか?

私は多くの同様のトピックをチェックしました。しかし、それは私の混乱を解消していないようです。私を助けてください。

4

2 に答える 2

0

FileNames から何も削除せず、通常のリストである UploadedFileDataCollection からのみ削除するため、これは正しい動作です。UploadedFileDataCollection の残りの項目に基づいて FileNames リストを再作成するように UI をティールするには、propertyChanged を上げる必要があることは明らかです。

于 2013-04-04T16:20:10.720 に答える