将列表集合绑定到列表视图
本文关键字:列表 视图 集合 绑定 | 更新日期: 2023-09-27 18:32:33
我有一个对象列表,我想使用数据模板将它们绑定到列表视图(单向绑定(。目前,列表视图没有显示任何内容,我是新手,我不知道问题出在哪里。
这是我的对象类
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>
这是我输入项目源的代码
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;
}
我在这里做错了什么?此外,如何/可以使用数据上下文来实现此目的?提前非常感谢!
这里有几个问题:
-
第一个主要问题是您在 XAML 中的绑定路径错误,它应该是:
<TextBlock Text="{Binding Path=CategoryObjectInstance, Mode=OneWay}" />
-
第二个主要问题是您应该绑定到属性 - 没有这个它也不会工作
-
并且您正在定义
OnPropertyCanged
但没有使用它(现在这不是那么重要,但进一步的更改不会显示在列表中(。考虑到这一点和上面的一点,它应该看起来像这样:public string categoryObjectInstance; public string CategoryObjectInstance { get { return categoryObjectInstance; } set { categoryObjectInstance = value; OnPropertyChanged("CategoryObjectInstance"); } }
-
但是上面只会在"类别对象实例"更改后有所帮助,以后添加/删除项目时对您没有帮助,我建议使用 ObservableCollection 而不是列表
我还看到您使用消息框进行调试,这不适合此,请尝试使用:
//to debug
Debug.WriteLine(newCategoryObjectList.Count);
在Visual Studio中打开Debug->输出窗口 - 你将在那里看到它。如果您以前使用它,您可能会看到以前的问题。
DataContext 已设置为列表中的对象。试试这个:
Text="{Binding CategoryObjectInstance, Mode=OneWay}" />