TPLとUWPの新機能で、MVVMと一緒にfileopenpickerコントロールを使用しています。検索ボタンがあり、FileOpenPickerを開き、複数のファイルを選択し、ListViewを使用してビューに戻したいと思っています。ViewModelのFileOpenPickerは、複数のファイルを選択した後にViewの変更を反映しません。
は、ビューのコードスニペット考えてみましょう:ViewModelにで
<Button x:Name="search" Content="select image" RelativePanel.RightOf="imagepath" Command="{x:Bind addProduct.SearchCommand}"
Grid.Row="5" Grid.Column="2" Margin="20"></Button>
<ListView x:Name="lstImages" Grid.Row="6" Grid.Column="2" DataContext="{Binding addProduct}" >
<ListView.ItemTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Name}" Width="100" TextAlignment="Left" >
</TextBlock>
<ProgressRing Width="20" Height="20" Foreground="Brown" x:Name="progress" IsActive="True" />
<Button Margin="10, 0, 0, 0" Foreground="Brown" x:Name="Delete" Content="Delete"
Command="{Binding ElementName=lstImages, Path=DataContext.DeleteCommand }" CommandParameter="{Binding}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
を、私は私の委任コマンドを初期化してからファイルを選択するために、非同期メソッドを使用しています。プロパティの保存時にしながら、ピッカーを使用して選択
public AddProductViewModel()
{
this.SearchCommand = new DelegateCommand(this.SearchFiles);
}
private async void SearchFiles()
{
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".jpeg");
picker.ViewMode = PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
var result = await picker.PickMultipleFilesAsync();
var files = new ObservableCollection<StorageFile>();
if (result != null)
{
foreach (var item in result.ToList())
{
files.Add(item);
}
}
this.Files = files;
//return files;
}
ファイルは、ビューに反映されていないファイルは、正しいデータを保存するために利用可能です。
提案をお寄せいただきありがとうございます。コードの何が間違っていますか?
「this.Files」とはどのようなタイプですか? –
this.FilesはStorageFileのObservableCollectionです public ObservableCollectionファイル{get; set;} –