C#XAML:更改ObservableCollection的实例后,UI不会更新

前端之家收集整理的这篇文章主要介绍了C#XAML:更改ObservableCollection的实例后,UI不会更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是C#的新手,并尝试开发 Windows 10 UWP应用程序作为业余爱好项目.

MainBrowser.XAML的一部分

<GridView x:Name="browserPane" ItemsSource="{x:Bind fileInCurrentFolderList,Mode=OneWay}" SelectionChanged="browserPane_SelectionChanged" Margin="0,48,0">
                <GridView.ItemTemplate>
                    <DataTemplate x:DataType="classes:Item">
                        <StackPanel Margin="10">
                            <Image Height="268" Width="200" Source="{x:Bind Thumbnail}" x:Phase="1" Stretch="UniformToFill"></Image>
                            <TextBlock Width="200" Text="{x:Bind Caption}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" MaxLines="2"/>
                        </StackPanel>
                    </DataTemplate>
                </GridView.ItemTemplate>
            </GridView>

此网格视图绑定到

public sealed partial class MainBrowser : Page
{
...
private ObservableCollection<Item> fileInCurrentFolderListUI = new ObservableCollection<Item>();
...
}

应用程序左侧有一个按钮列表.每个按钮都会调用一个方法,该方法将返回一个ObservableCollection< Item>背部.

问题是我需要做类似的事情

foreach (Item file in ReturnObservableCollection)
    {
    fileInCurrentFolderList.Add(item);
    }

而不是这个

fileInCurrentFolderList = ReturnObservableCollection;

能够在UI中触发更新.
我怎么能改变这个?

解决方法

发生的事情是ObservableCollection报告何时添加删除项目,但如果集合本身发生更改(即实例化新实例),则无法报告更改.一种解决方案是在@R_404_93@l中使用 INotifyPropertyChanged接口并报告对属性的更改.
public sealed partial class MainBrowser : Page,INotifyPropertyChanged
{
    // Backing field.
    private ObservableCollection<Item> fileInCurrentFolderListUI;
    // Property.
    public ObservableCollection<Item> FileInCurrentFolderListUI
    {
        get { return fileInCurrentFolderListUI; }
        set
        {
            if (value != fileInCurrentFolderListUI)
            {
                fileInCurrentFolderListUI = value;
                // Notify of the change.
                NotifyPropertyChanged();
            }
        }
    }

    // PropertyChanged event.
    public event PropertyChangedEventHandler PropertyChanged;

    // PropertyChanged event triggering method.
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
        }
    }
}

您可以像之前那样初始化声明中的支持字段,或者只是在构造函数中初始化属性.只需确保绑定到属性而不是绑定字段.此外,如果要分配新对象,请确保对属性执行此操作,以便可以广播更改.基本上,不要与支持字段交互,只需通过属性执行所有操作.

原文链接:https://www.f2er.com/c/239468.html

猜你在找的C&C++相关文章