ContainerContentChanging事件和数据模型更改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ContainerContentChanging事件和数据模型更改相关的知识,希望对你有一定的参考价值。

我正在使用GridView引发的ContentContainerChanging事件,以在我的UWP应用中渲染图像网格。该应用程序正在同步来自Web的某些数据,并且这些数据在本地存储到SQLite数据库时会呈现。我从XAML绑定到我的模型中的两个属性有几个TextBlocks。然后,我将图像逐步加载到ContentContainerChanging回调中。这对于易于渲染的数据非常有用,但是与一种方式的数据绑定直接相悖。

我对此事件的理解是,每次在屏幕上渲染该项目时都会调用它。在我的情况下,带有文本数据的模型可以在下载图像的同时提前使用。因此,他们看到了一个占位符。但是,一旦下载了映像,就无法强制再次调用ContentContainerChanging。完全下载图像后,如何告诉GridView仅重新渲染ViewPort中的项目?随着用户滚动,图像将被渲染,但是如果用户从不滚动怎么办?

我可以刷新整个ObservableCollection,但这对用户来说是一种奇怪的体验。我看到项目已删除,所有项目又被添加。从技术上讲,模型本身没有变化,只有图像。因此,这似乎很浪费。滚动位置/上下文也会丢失。

是否有办法以某种方式再次启动ContentContainerChanging并强制UI再次渲染我的图像?

答案

如果要在下载后在GridView中显示图像,可以尝试在模型中添加path属性,并将其与Image Source绑定。该模型需要实现INotifyPropertyChanged接口并订阅PropertyChanged事件。下载图像后,您可以修改ObservableCollection并将路径传递给每个模型。在这种情况下,UI将自动更新以显示您的图像。例如:

。xaml:

<GridView x:Name="MyGridView" ItemsSource="x:Bind Lists,Mode=OneWay">
    <GridView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Image Source="Binding Url" Width="50" Height="50"></Image>
            </StackPanel>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

。cs:

public class MyViewModel : INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged = delegate  ;

    public string url  get; set; 
    public string Url
    
        get  return url; 
        set
        
            url = value;
            this.OnPropertyChanged();
        
    

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    



private ObservableCollection<MyViewModel> Lists = new ObservableCollection<MyViewModel>();

//pass the path of image

MyViewModel v = Lists[0];
v.Url = "https://picsum.photos/48?image=883";
另一答案

感谢@Faywang。您建议绑定到LocalCache映像的完整路径的建议对我来说效果很好。加上x:Phase似乎就像重写ContainerContentChanging事件一样工作。

以上是关于ContainerContentChanging事件和数据模型更改的主要内容,如果未能解决你的问题,请参考以下文章

第11件事 产品战略规划十步法

有些事,我不甘

Kafka用Zookeeper所做的那些事

什么事应该问百度,什么事应该问淘宝

什么是作用域, 什么事闭包, 什么事原型链

JS异步那些事 四(HTML 5 Web Workers)