Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows 8 XAML:通过数据绑定在GridView中显示图像列表_C#_Xaml_Windows 8_Winrt Xaml - Fatal编程技术网

C# Windows 8 XAML:通过数据绑定在GridView中显示图像列表

C# Windows 8 XAML:通过数据绑定在GridView中显示图像列表,c#,xaml,windows-8,winrt-xaml,C#,Xaml,Windows 8,Winrt Xaml,我正试图用C#编写一个Windows8应用程序,其中我希望显示用户通过FileOpenPicker选择的图像列表。我希望使用XAML数据绑定在GridView中显示这些图像。我尝试了一些方法,但数据绑定似乎不起作用。我不确定需要在什么位置设置GridView的itemssource。如果我在MainPage构造函数中执行此操作,则GridView不会刷新,因为数据绑定列表会在用户选择图像后填充 如何修复此问题?更新1 如果要绑定GridView,则需要添加一些内容。请看,我已经用一些注释行更新了

我正试图用C#编写一个Windows8应用程序,其中我希望显示用户通过FileOpenPicker选择的图像列表。我希望使用XAML数据绑定在GridView中显示这些图像。我尝试了一些方法,但数据绑定似乎不起作用。我不确定需要在什么位置设置GridView的itemssource。如果我在MainPage构造函数中执行此操作,则GridView不会刷新,因为数据绑定列表会在用户选择图像后填充


如何修复此问题?

更新1

如果要绑定
GridView
,则需要添加一些内容。请看,我已经用一些注释行更新了我的答案。您需要通过XAML添加这些行以提供
ItemsSource


给你

C#

private async void btnBrowsePhotos\u单击(对象发送方,路由目标)
{
//var objImageItem=新的ImageItem();
FileOpenPicker openPicker=新的FileOpenPicker();
openPicker.ViewMode=PickerViewMode.缩略图;
openPicker.SuggestedStartLocation=PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(“.jpg”);
openPicker.FileTypeFilter.Add(“.jpeg”);
openPicker.FileTypeFilter.Add(“.png”);
var files=等待openPicker.PickMultipleFileAsync();
List ImageList=新列表();
foreach(文件中的var文件)
{
使用(var stream=await file.OpenAsync(FileAccessMode.Read))
{
//添加(新的ImageItem(stream,file.Name));
Add(新的ImageItem(stream,file.Name));
}
}
gv.ItemsSource=图像列表;
//gv.DataContext=objImageItem;
}
公共类ImageItem/:INotifyPropertyChanged
{
/*私有ObservableCollection_ImageList=新ObservableCollection();
公共可观察收集图像列表
{
获取{return\u ImageList;}
设置{u ImageList=value;OnPropertyChanged(“ImageList”);}
}*/
公共位图图像源{get;set;}
公共字符串名称{get;set;}
公共项目()
{
}
公共ImageItem(irandomaccesstream,字符串名称)
{
BitmapImage bmp=新的BitmapImage();
bmp.SetSource(流);
来源=bmp;
名称=名称;
}
}
XAML



是否可以通过XAML而不是通过代码设置ItemsSource?是否可以不创建私有备份存储,而是创建一个公共属性本身,它是一个可观察的集合。类似于“PublicObservableCollection ImageList=new ObservableCollection();”。在这种情况下,由于属性本身是一个集合,因此不应该要求我们自己触发属性更改事件。这对于C++来说不是为C语言工作的,因为某些原因,你不必执行<代码> NoTyFyPryTyType < /C> >,没有它,可能就不起作用。尽管你试着让我知道。
private async void btnBrowsePhotos_Click(object sender, RoutedEventArgs e)
{
    //var objImageItem = new ImageItem();   
    FileOpenPicker openPicker = new FileOpenPicker();

    openPicker.ViewMode = PickerViewMode.Thumbnail;
    openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
    openPicker.FileTypeFilter.Add(".jpg");
    openPicker.FileTypeFilter.Add(".jpeg");
    openPicker.FileTypeFilter.Add(".png");

    var files = await openPicker.PickMultipleFilesAsync();
    List<ImageItem> ImageList = new List<ImageItem>();
    foreach (var file in files)
    {
        using (var stream = await file.OpenAsync(FileAccessMode.Read))
        {
            //objImageItem.ImageList.Add(new ImageItem(stream, file.Name));
            ImageList.Add(new ImageItem(stream, file.Name)); 
        }
    }

    gv.ItemsSource = ImageList;
    //gv.DataContext = objImageItem;
}

public class ImageItem //: INotifyPropertyChanged 
{
    /*private ObservableCollection<ImageItem> _ImageList = new ObservableCollection<ImageItem>();
    public ObservableCollection<ImageItem> ImageList
    {
         get { return _ImageList; }
         set { _ImageList = value; OnPropertyChanged("ImageList"); }
    }*/

    public BitmapImage Source { get; set; }
    public string Name { get; set; }

    public ImageItem()
    {

    }

    public ImageItem(IRandomAccessStream stream, string name)
    {
        BitmapImage bmp = new BitmapImage();
        bmp.SetSource(stream);
        Source = bmp;
        Name = name;
    }
}
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <Button Click="btnBrowsePhotos_Click" Style="{StaticResource BrowsePhotosAppBarButtonStyle}" />

        <!-- Add ItemsSource="{Binding ImageList}" to GridView -->

        <GridView x:Name="gv">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Image Stretch="Fill" Source="{Binding Source}" Height="192" Width="342" />
                        <Border Opacity=".8" Background="Black" VerticalAlignment="Bottom" >
                            <TextBlock Text="{Binding Name}" FontSize="18"/>
                        </Border>
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapGrid MaximumRowsOrColumns="3" />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
        </GridView>
    </StackPanel>
</Grid>