Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 将列表集合绑定到列表视图_C#_Xaml_Windows Phone 8.1 - Fatal编程技术网

C# 将列表集合绑定到列表视图

C# 将列表集合绑定到列表视图,c#,xaml,windows-phone-8.1,C#,Xaml,Windows Phone 8.1,我有一个对象列表,我想使用数据模板(单向绑定)将它们绑定到列表视图。目前,列表视图没有显示任何内容,我对这一点还不熟悉,我不知道问题出在哪里 这是我的对象类 public class CategoryObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public string CategoryObjectInstance; protect

我有一个对象列表,我想使用数据模板(单向绑定)将它们绑定到列表视图。目前,列表视图没有显示任何内容,我对这一点还不熟悉,我不知道问题出在哪里

这是我的对象类

public class CategoryObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string CategoryObjectInstance;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var eventHandler = this.PropertyChanged;
        if (eventHandler != null)
        {
            eventHandler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
这是我的列表视图的XAML代码

<ListView Grid.Row="2" Name="ListView1" Margin="10,0">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock 
                    Style="{StaticResource ListViewItemContentTextBlockStyle}"
                    Text="{Binding Path=CategoryObject.CategoryObjectInstance, Mode=OneWay}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

这是我输入itemssource的代码

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        List<CategoryClass.CategoryObject> newCategoryObjectList = new List<CategoryClass.CategoryObject>();
        for (int i = 0; i < 10; i++)
        {
            CategoryClass.CategoryObject newCategoryObject = new CategoryClass.CategoryObject();
            //set arbitarily value 
            newCategoryObject.CategoryObjectInstance = i.ToString() + i.ToString() + i.ToString() + i.ToString() + i.ToString();
            newCategoryObjectList.Add(newCategoryObject);
        }

        //to debug
        var messageDialog = new Windows.UI.Popups.MessageDialog(newCategoryObjectList.Count.ToString());
            messageDialog.ShowAsync();

        ListView1.ItemsSource = newCategoryObjectList;
    }
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
List newCategoryObjectList=新列表();
对于(int i=0;i<10;i++)
{
CategoryClass.CategoryObject newCategoryObject=新建CategoryClass.CategoryObject();
//任意设定值
newCategoryObject.CategoryObject实例=i.ToString()+i.ToString()+i.ToString()+i.ToString()+i.ToString()+i.ToString();
newCategoryObject.Add(newCategoryObject);
}
//调试
var messageDialog=newwindows.UI.Popups.messageDialog(newCategoryObjectList.Count.ToString());
messageDialog.showsync();
ListView1.ItemsSource=newCategoryObjectList;
}

我做错了什么?此外,如何/可以使用数据上下文来实现这一点?非常感谢

DataContext已设置为列表中的对象。试试这个:

Text="{Binding CategoryObjectInstance, Mode=OneWay}" />

这里有两个问题:

  • 第一个主要问题是,在XAML中绑定的路径错误,应该是:

    <TextBlock Text="{Binding Path=CategoryObjectInstance, Mode=OneWay}" />
    
  • 但是,上述内容只会在“CategoryObjectInstance”发生更改时起作用,对您以后添加/删除项目没有帮助,我建议使用ObservableCollection而不是列表

此外,我还看到您使用MessageBox进行调试,但这不适用于此,请尝试使用:

//to debug
Debug.WriteLine(newCategoryObjectList.Count);

在Visual Studio中打开调试->输出窗口-您将在那里看到它。如果您以前使用过它,您可能已经看到了以前的问题。

非常感谢,它很有效!我绝对是新手,我想使用最“优雅”的方法来编写代码,而不需要太多的小技巧。@user776914不客气,我还添加了有关MessageBox更好的调试方法的信息-尝试使用它,我可以问一下我应该如何实现OnPropertyChanged并正确使用它来更新listview吗?此外,关于observablecollection,我是否以与列表相同的方式使用它,并且它将在添加/删除项目时更新listview?@user776914 observablecollection将管理对您的集合的添加/删除操作-它将自动通知您的listview并更新它(举个例子-将您的
newCategoryObjectList
移动到main类(使其成为可观察的集合),然后单击按钮添加一个新项目-您应该会在屏幕上看到它。至于OnPropertyChanged-当项目的值更改时,它将更新UI,点击第二个按钮并将其放置在那里
newCategoryObjectList[0].CategoryObjectInstance=“我的新值”
。单击按钮后,您应该会在屏幕上看到它的更新。我已经成功实现了observable集合,现在它可以工作了!感谢您现在指出这一点,因为我确信我将来会遇到这个问题。
//to debug
Debug.WriteLine(newCategoryObjectList.Count);