C# UWP 10 C.将文本文件读入列表 让我先说我对UWP是全新的,我最接近这门语言的是12年前的C++。p>

C# UWP 10 C.将文本文件读入列表 让我先说我对UWP是全新的,我最接近这门语言的是12年前的C++。p>,c#,win-universal-app,C#,Win Universal App,我正在为Windows Universal编写一个应用程序,在其中我将逐行读取不同的文本文件,拆分每行的内容一些文件我不需要拆分行,将数据添加到列表中,然后在屏幕上显示。我已经尝试了很多方法来做这件事,但我没有让它正常工作。我目前有两种方法是有效的,但并不一致。它将显示数据,但只是有时显示。当我在emulator或本地设备上运行应用程序时,它可能会显示数据,也可能不会显示数据,然后如果我单击其他页面并返回列表页面,它可能会再次显示数据,也可能不会再次显示数据 这是密码。。在本例中,我将文本文件的

我正在为Windows Universal编写一个应用程序,在其中我将逐行读取不同的文本文件,拆分每行的内容一些文件我不需要拆分行,将数据添加到列表中,然后在屏幕上显示。我已经尝试了很多方法来做这件事,但我没有让它正常工作。我目前有两种方法是有效的,但并不一致。它将显示数据,但只是有时显示。当我在emulator或本地设备上运行应用程序时,它可能会显示数据,也可能不会显示数据,然后如果我单击其他页面并返回列表页面,它可能会再次显示数据,也可能不会再次显示数据

这是密码。。在本例中,我将文本文件的内容拆分为3个字符串,在“-”上拆分

在我的XAML.cs文件中

public sealed partial class SPList : Page
{
    private List<ThreeColumnList> ThreeColumnLists;
    public SPList()
    {
        this.InitializeComponent();
        ThreeColumnLists = ThreeColumnListManager.GetList();
    }
}
在我的三列列表manager.cs中

class ThreeColumnListManager
{
    public static List<ThreeColumnList> GetList()
    {
        var threecolumnlists = new List<ThreeColumnList>();

        //Add a dummy row to present something on screen
        threecolumnlists.Add(new ThreeColumnList { Name = "Name1", Age = "Age1", Job = "Job1" });

        //First working method
        readList(threecolumnlists);

        //Second Working Method
        //tryAgain(threecolumnlists);

        return threecolumnlists;
    }

    public static async void readList(List<ThreeColumnList> tcl)
    {
        List<ThreeColumnList> a = tcl;
        string _line;
        var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Lists/splist.txt"));
        using (var inputStream = await file.OpenReadAsync())
        using (var classicStream = inputStream.AsStreamForRead())
        using (var streamReader = new StreamReader(classicStream))
        {
            while (streamReader.Peek() >= 0)
            {
                Debug.WriteLine("Line");
                _line = streamReader.ReadLine();
                //Debug.WriteLine(string.Format("the line is {0}", _line ));
                string _first = "" + _line.Split('-')[0];
                string _second = "" + _line.Split('-')[1];
                string _third = "" + _line.Split('-')[2];

                a.Add(new ThreeColumnList { Name = _first, Age = _second, Job = _third });
            }
        }
    }

    public static async void tryAgain(List<ThreeColumnList> tcl)
    {
        //Loading Folder
        var _folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
        _folder = await _folder.GetFolderAsync("Lists");

        //Get the file
        var _file = await _folder.GetFileAsync("splist.txt");

        // read content
        IList<string> _ReadLines = await Windows.Storage.FileIO.ReadLinesAsync(_file);

        int i = 0;
        foreach (var _line in _ReadLines)
        {
            i++;
            string _first = "" + _line.Split('-')[0];
            string _second = "" + _line.Split('-')[1];
            string _third = "" + _line.Split('-')[2];
            tcl.Add(new ThreeColumnList { Name = _first, Age = _second, Job = _third });
        }
        Debug.WriteLine("Count is " + i);
    }
}
排队!是一个分隔行,但它仍将显示!在屏幕上拆分后显示-

起初,我试图获取文件的内容并将其返回到GetList,然后将内容处理到列表中,但我没有运气

然后我决定尝试将列表传递给获取内容并填充列表的方法

我拥有的两个功能都会在屏幕上显示内容,但并不一致。ReadList似乎比tryAgain工作得更频繁,但它仍然不能每次都工作

另外,请注意,我尝试过这样做,我没有拆分文件每一行的内容,我看到了同样的问题,它只是偶尔加载

。一旦我完成了这项工作,我就开始阅读文件

我有一种感觉,我真的很接近,但我不确定

有人对我的错误有什么建议吗


谢谢

在这里用四肢行走,但是:


异步操作意味着它可以在不同的线程上运行,因此读取文件的最终结果可能是三列列表位于不同的线程上。您是否收到或已抑制加载文件期间或加载后不久发生的异常?如果所有者线程不是UI线程来避免这个问题,您可能会考虑双重检查,即在绑定发生之前将列表编组到UI线程。

此处,但是:

异步操作意味着它可以在不同的线程上运行,因此读取文件的最终结果可能是三列列表位于不同的线程上。您是否收到或已抑制加载文件期间或加载后不久发生的异常?如果所有者线程不是UI线程来避免这个问题,您可能会考虑双重检查,即绑定之前将列表编组到UI线程。

您必须等待或等待任务。

更改签名 公共静态异步void readListList tcl 到 公共静态异步任务readListList tcl 然后像ReadListThreeColumnList一样调用它

这会破坏代码的异步性,但会起作用。 最好的方法是将GetList更改为异步,并在向用户显示微调器或进度条的任务中运行此任务:

public SPList()
{
    this.InitializeComponent();
    Task.Run(async () =>
    {
        IsLoading = true;
        ThreeColumnLists = await ThreeColumnListManager.GetList();
        IsLoading = false;
    }
}

private bool _isLoading;
public bool IsLoading
{
    get { return _isLoading; }
    set
    {
        if(_isLoading != value)
        {
            _isLoading = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsLoading));
        }
    }
}
你必须等待或等待任务

更改签名 公共静态异步void readListList tcl 到 公共静态异步任务readListList tcl 然后像ReadListThreeColumnList一样调用它

这会破坏代码的异步性,但会起作用。 最好的方法是将GetList更改为异步,并在向用户显示微调器或进度条的任务中运行此任务:

public SPList()
{
    this.InitializeComponent();
    Task.Run(async () =>
    {
        IsLoading = true;
        ThreeColumnLists = await ThreeColumnListManager.GetList();
        IsLoading = false;
    }
}

private bool _isLoading;
public bool IsLoading
{
    get { return _isLoading; }
    set
    {
        if(_isLoading != value)
        {
            _isLoading = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsLoading));
        }
    }
}

尝试实现INotifyPropertyChanged和ObservableCollection接口,这些接口用于通知客户端(通常是绑定客户端)属性值已更改

还可以使用Task加载数据

编辑:

MainPage.cs.xaml

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Net.Sockets;
using System.Threading.Tasks;
using Windows.Foundation.Collections;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace TestUWP
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private ObservableCollection<ThreeColumnList> threeColumnLists;

        public ObservableCollection<ThreeColumnList> ThreeColumnLists
        {
            get { return threeColumnLists ?? (threeColumnLists = new ObservableCollection<ThreeColumnList>()); }
            set { threeColumnLists = value; }
        }
        public MainPage()
        {
            this.InitializeComponent();
            LoadData();

        }

        private async void LoadData()
        {
            //you can also change the private threeColumnLists to a static 
            // and do 
            //if(ThreeColumnLists.Count==0) 
            //   ThreeColumnLists = await ThreeColumnListManager.GetListAsync();
            ThreeColumnLists = await ThreeColumnListManager.GetListAsync();
            //can also do
            // await ThreeColumnListManager.readList(ThreeColumnLists);
        }

    }

    public class ThreeColumnList : INotifyPropertyChanged
    {
        private string name = string.Empty;
        public string Name { get { return name; } set { name = value; NotifyPropertyChanged("Name"); } }

        private string age = string.Empty;
        public string Age { get { return age; } set { age = value; NotifyPropertyChanged("Age"); } }

        private string job = string.Empty;
        public string Job { get { return job; } set { job = value; NotifyPropertyChanged("Job"); } }

        //PropertyChanged handers
        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    public class ThreeColumnListManager
    {
        public static async Task<ObservableCollection<ThreeColumnList>> GetListAsync()
        {
            var threecolumnlists = new ObservableCollection<ThreeColumnList>();

            //Add a dummy row to present something on screen
            threecolumnlists.Add(new ThreeColumnList { Name = "Name1", Age = "Age1", Job = "Job1" });

            //First working method
            await readList(threecolumnlists);

            //Second Working Method
            //tryAgain(threecolumnlists);

            return threecolumnlists;
        }

        public static async Task readList(ObservableCollection<ThreeColumnList> tcl)
        {
            string _line;
            var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Lists/slplist.txt"));
            using (var inputStream = await file.OpenReadAsync())
            using (var classicStream = inputStream.AsStreamForRead())
            using (var streamReader = new StreamReader(classicStream))
            {
                while (streamReader.Peek() >= 0)
                {
                    Debug.WriteLine("Line");
                    _line = streamReader.ReadLine();
                    //Debug.WriteLine(string.Format("the line is {0}", _line ));
                    string _first = "" + _line.Split('-')[0];
                    string _second = "" + _line.Split('-')[1];
                    string _third = "" + _line.Split('-')[2];

                    tcl.Add(new ThreeColumnList { Name = _first, Age = _second, Job = _third });
                }
            }
        }

        public static async Task tryAgain(ObservableCollection<ThreeColumnList> tcl)
        {
            //Loading Folder
            var _folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
            _folder = await _folder.GetFolderAsync("Lists");

            //Get the file
            var _file = await _folder.GetFileAsync("splist.txt");

            // read content
            IList<string> _ReadLines = await Windows.Storage.FileIO.ReadLinesAsync(_file);

            int i = 0;
            foreach (var _line in _ReadLines)
            {
                i++;
                string _first = "" + _line.Split('-')[0];
                string _second = "" + _line.Split('-')[1];
                string _third = "" + _line.Split('-')[2];
                tcl.Add(new ThreeColumnList { Name = _first, Age = _second, Job = _third });
            }
            Debug.WriteLine("Count is " + i);
        }
    }
}
MainPage.xaml

<Page
x:Class="TestUWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestUWP"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Page.Resources>
    <!-- x:DataType="<Name Of Class>" -->
    <DataTemplate x:Key="ThreeColumnListDataTemplate" x:DataType="local:ThreeColumnList">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
            <TextBlock Grid.Column="0" Text="{x:Bind Name}" HorizontalAlignment="Left" FontSize="16" Margin="20,20,20,20" />
            <TextBlock Grid.Column="1" Text="{x:Bind Age}" HorizontalAlignment="Left" FontSize="16" Margin="20,20,20,20" />
            <TextBlock Grid.Column="2" Text="{x:Bind Job}" HorizontalAlignment="Right" FontSize="16" Margin="20,20,20,20" />
        </StackPanel>
    </DataTemplate>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="100" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />

    </Grid.ColumnDefinitions>
    <TextBlock Grid.Row="1" 
               Name="ResultTextBlock" 
               FontSize="24" 
               Foreground="Red" 
               FontWeight="Bold" 
               Margin="20,20,0,0" />
    <!--  ItemsSource="x:Bind <Variable from the CS(Code) Class>   -->
    <ListView Grid.ColumnSpan="3" ItemsSource="{x:Bind ThreeColumnLists}" 
              ItemTemplate="{StaticResource ThreeColumnListDataTemplate}">
    </ListView>

</Grid>
输出:


尝试实现INotifyPropertyChanged和ObservableCollection接口,这些接口用于通知客户端(通常是绑定客户端)属性值已更改

还可以使用Task加载数据

编辑:

MainPage.cs.xaml

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Net.Sockets;
using System.Threading.Tasks;
using Windows.Foundation.Collections;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace TestUWP
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private ObservableCollection<ThreeColumnList> threeColumnLists;

        public ObservableCollection<ThreeColumnList> ThreeColumnLists
        {
            get { return threeColumnLists ?? (threeColumnLists = new ObservableCollection<ThreeColumnList>()); }
            set { threeColumnLists = value; }
        }
        public MainPage()
        {
            this.InitializeComponent();
            LoadData();

        }

        private async void LoadData()
        {
            //you can also change the private threeColumnLists to a static 
            // and do 
            //if(ThreeColumnLists.Count==0) 
            //   ThreeColumnLists = await ThreeColumnListManager.GetListAsync();
            ThreeColumnLists = await ThreeColumnListManager.GetListAsync();
            //can also do
            // await ThreeColumnListManager.readList(ThreeColumnLists);
        }

    }

    public class ThreeColumnList : INotifyPropertyChanged
    {
        private string name = string.Empty;
        public string Name { get { return name; } set { name = value; NotifyPropertyChanged("Name"); } }

        private string age = string.Empty;
        public string Age { get { return age; } set { age = value; NotifyPropertyChanged("Age"); } }

        private string job = string.Empty;
        public string Job { get { return job; } set { job = value; NotifyPropertyChanged("Job"); } }

        //PropertyChanged handers
        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    public class ThreeColumnListManager
    {
        public static async Task<ObservableCollection<ThreeColumnList>> GetListAsync()
        {
            var threecolumnlists = new ObservableCollection<ThreeColumnList>();

            //Add a dummy row to present something on screen
            threecolumnlists.Add(new ThreeColumnList { Name = "Name1", Age = "Age1", Job = "Job1" });

            //First working method
            await readList(threecolumnlists);

            //Second Working Method
            //tryAgain(threecolumnlists);

            return threecolumnlists;
        }

        public static async Task readList(ObservableCollection<ThreeColumnList> tcl)
        {
            string _line;
            var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Lists/slplist.txt"));
            using (var inputStream = await file.OpenReadAsync())
            using (var classicStream = inputStream.AsStreamForRead())
            using (var streamReader = new StreamReader(classicStream))
            {
                while (streamReader.Peek() >= 0)
                {
                    Debug.WriteLine("Line");
                    _line = streamReader.ReadLine();
                    //Debug.WriteLine(string.Format("the line is {0}", _line ));
                    string _first = "" + _line.Split('-')[0];
                    string _second = "" + _line.Split('-')[1];
                    string _third = "" + _line.Split('-')[2];

                    tcl.Add(new ThreeColumnList { Name = _first, Age = _second, Job = _third });
                }
            }
        }

        public static async Task tryAgain(ObservableCollection<ThreeColumnList> tcl)
        {
            //Loading Folder
            var _folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
            _folder = await _folder.GetFolderAsync("Lists");

            //Get the file
            var _file = await _folder.GetFileAsync("splist.txt");

            // read content
            IList<string> _ReadLines = await Windows.Storage.FileIO.ReadLinesAsync(_file);

            int i = 0;
            foreach (var _line in _ReadLines)
            {
                i++;
                string _first = "" + _line.Split('-')[0];
                string _second = "" + _line.Split('-')[1];
                string _third = "" + _line.Split('-')[2];
                tcl.Add(new ThreeColumnList { Name = _first, Age = _second, Job = _third });
            }
            Debug.WriteLine("Count is " + i);
        }
    }
}
MainPage.xaml

<Page
x:Class="TestUWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestUWP"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Page.Resources>
    <!-- x:DataType="<Name Of Class>" -->
    <DataTemplate x:Key="ThreeColumnListDataTemplate" x:DataType="local:ThreeColumnList">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
            <TextBlock Grid.Column="0" Text="{x:Bind Name}" HorizontalAlignment="Left" FontSize="16" Margin="20,20,20,20" />
            <TextBlock Grid.Column="1" Text="{x:Bind Age}" HorizontalAlignment="Left" FontSize="16" Margin="20,20,20,20" />
            <TextBlock Grid.Column="2" Text="{x:Bind Job}" HorizontalAlignment="Right" FontSize="16" Margin="20,20,20,20" />
        </StackPanel>
    </DataTemplate>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="100" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />

    </Grid.ColumnDefinitions>
    <TextBlock Grid.Row="1" 
               Name="ResultTextBlock" 
               FontSize="24" 
               Foreground="Red" 
               FontWeight="Bold" 
               Margin="20,20,0,0" />
    <!--  ItemsSource="x:Bind <Variable from the CS(Code) Class>   -->
    <ListView Grid.ColumnSpan="3" ItemsSource="{x:Bind ThreeColumnLists}" 
              ItemTemplate="{StaticResource ThreeColumnListDataTemplate}">
    </ListView>

</Grid>
输出:


可以显示输入文件的一部分吗?@sybren抱歉,可以!我本来想补充的!我现在用一个样本更新了这篇文章。我也尝试过这样做,我没有分割文件中的每一行,我只使用了一列,并且我得到了相同的结果,它只是有时起作用。该文本文件中的数据与任何包含新行的文本文件一样。谢谢我调试了你的代码,效果很好。我相信在代码方面你很好。让我担心的是xaml部分。如何显示数据??你能添加xaml部分以及如何在元素中传递数据吗?@Stamos我现在用我的xaml更新了post,也用了我下面实现列表的教程。一旦我开始工作,我就开始阅读pa文件

是否可以显示输入文件的一部分?@sybren抱歉,是的!我本来想补充的!我现在用一个样本更新了这篇文章。我也尝试过这样做,我没有分割文件中的每一行,我只使用了一列,并且我得到了相同的结果,它只是有时起作用。该文本文件中的数据与任何包含新行的文本文件一样。谢谢我调试了你的代码,效果很好。我相信在代码方面你很好。让我担心的是xaml部分。如何显示数据??你能添加xaml部分以及如何在元素中传递数据吗?@Stamos我现在用我的xaml更新了post,也用了我下面实现列表的教程。一旦我开始工作,我就开始从文件中读入部分谢谢。首先,我尝试了.Wait方法。当我尝试在这次更改后运行应用程序时,一旦我单击按钮加载文件,它就会挂起。然后,我按照您的建议更改了GetList,这样做会更好。但它仍然不是每次都加载。它将成功加载约80%的时间,这是一个巨大的改进。PropertyChanged?.Invokethis,新的PropertyChangedEventArgsnameofIsLoading;是否在我的代码中显示PropertyChanged上的异常?所以现在我已经把这个评论掉了。你知道为什么每次都不管用吗??谢谢另外,我刚刚注意到,当数据没有完全加载时,它甚至没有显示编码到屏幕列表中的虚拟行。所以它几乎就像现在它似乎有问题的列表,但不是文本文件!。。。要使PropertyChanged正常工作,您的类需要实现INotifyPropertyChanged接口。谢谢。首先,我尝试了.Wait方法。当我尝试在这次更改后运行应用程序时,一旦我单击按钮加载文件,它就会挂起。然后,我按照您的建议更改了GetList,这样做会更好。但它仍然不是每次都加载。它将成功加载约80%的时间,这是一个巨大的改进。PropertyChanged?.Invokethis,新的PropertyChangedEventArgsnameofIsLoading;是否在我的代码中显示PropertyChanged上的异常?所以现在我已经把这个评论掉了。你知道为什么每次都不管用吗??谢谢另外,我刚刚注意到,当数据没有完全加载时,它甚至没有显示编码到屏幕列表中的虚拟行。所以它几乎就像现在它似乎有问题的列表,但不是文本文件!。。。要使PropertyChanged正常工作,您的类需要实现INotifyPropertyChanged接口。谢谢,但如果您能提供帮助,我会遇到一些问题。起初,我在SPList.xaml.cs文件中遇到了问题,但我在网上找到了一个解决方案,将public observeCollection ThreeColumnLists更改为private。这解决了这个问题。然后我在XAML中遇到了一个问题,但这是因为我在以前的代码中使用了不同的列表名称,所以我将其更新为指向三列列表。更改后,我可以构建并运行,但当我点击页面加载列表时,应用程序崩溃。这表明它在尝试加载新页面时找不到SPList。有什么想法吗?不要将public ObservableCollection ThreeColumnList更改为private。请确保xmlns:data=using:TrackingAssistant.Model和指向正确的位置。我在输出中添加了完整的解决方案。请检查此项,找出您的错误所在。谢谢!我用这段代码创建了一个新项目,我可以看到每次我用这段代码编译时,它都会完美地加载到列表中。然后我添加了第二个页面,并更改了App.xaml.cs以首先加载新页面。这个页面上只有一个按钮,所以我可以导航到列表页面。我还向列表页面添加了返回新页面的按钮,现在我发现当我加载并在页面之间单击时,大约80%的时间会加载列表。其他时候,它只是加载一个空白页。有什么原因不能每次加载吗?我开始怀疑它是否与仿真器相关。您是否在txt文件中添加或删除行??如果是,您正在从另一个应用程序的应用程序中执行??。如果没有更改私有可观察集合的三列列表;私有静态ObservableCollection三列列表;只需取消注释代码中的行,并注释ThreeColumnLists=await ThreeColumnListManager.GetListAsync;这样,它将加载列表一次并将其保存在内存中,每次您导航到该页面时,列表都会在那里。谢谢,但如果您能提供帮助,我会遇到问题。起初,我在SPList.xaml.cs文件中遇到了问题,但我在网上找到了一个解决方案,将public observeCollection ThreeColumnLists更改为private。这解决了这个问题。然后我在XAML中遇到了一个问题,但这是因为我在以前的代码中使用了不同的列表名称,所以我将其更新为指向三列列表。更改后,我可以构建并运行,但当我点击页面加载列表时,应用程序崩溃。这表明,当它尝试加载新的p时,无法找到SPList
年龄。有什么想法吗?不要将公共可观察集合三列列表更改为私人。请确保xmlns:data=using:TrackingAssistant.Model和指向正确的位置。我在输出中添加了完整的解决方案。请检查此项,找出您的错误所在。谢谢!我用这段代码创建了一个新项目,我可以看到每次我用这段代码编译时,它都会完美地加载到列表中。然后我添加了第二个页面,并更改了App.xaml.cs以首先加载新页面。这个页面上只有一个按钮,所以我可以导航到列表页面。我还向列表页面添加了返回新页面的按钮,现在我发现当我加载并在页面之间单击时,大约80%的时间会加载列表。其他时候,它只是加载一个空白页。有什么原因不能每次加载吗?我开始怀疑它是否与仿真器相关。您是否在txt文件中添加或删除行??如果是,您正在从另一个应用程序的应用程序中执行??。如果没有更改私有可观察集合的三列列表;私有静态ObservableCollection三列列表;只需取消注释代码中的行,并注释ThreeColumnLists=await ThreeColumnListManager.GetListAsync;这样,它将加载列表一次,并将其保存在内存中,每次您导航到页面时,列表都会出现在那里