WPF ListView 绑定错误解决方案

14 篇文章 1 订阅

ListView 绑定错误解决方案

错误: System.Windows.Data Error: 4 : Cannot find source for binding with reference ‘RelativeSource FindAncestor, AncestorType=‘System.Windows.Controls.ItemsControl’, AncestorLevel=‘1’’. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is ‘ListViewItem’ (Name=‘’); target property is ‘HorizontalContentAlignment’ (type ‘HorizontalAlignment’)

我在简单的WrapPanel上遇到了与我的ItemPanel相同的问题,对于具有复杂ItemTemplate的列表视图(尽管在任何地方都没有奇怪的对齐绑定)。在创建包含 ListView 的页面时,它会抱怨 HorizontalContentAlignment 和 VerticalContentAlignment 的绑定错误,并且之后它可以正常工作

<ListView.ItemsPanel>
  <ItemsPanelTemplate>
    <WrapPanel Orientation="Horizontal"/>
  </ItemsPanelTemplate>
</ListView.ItemsPanel>

我用 ttps://www.nuget.org/packages/VirtualizingWrapPanel/ 替换了WrapPanel,因为我无论如何都想虚拟化。错误现在消失了。请注意,由于某种原因,与标准包装板相比,定向的工作方式相反。

<ListView.ItemsPanel>
  <ItemsPanelTemplate>
    <wpftk:VirtualizingWrapPanel Orientation="Vertical"/>
  </ItemsPanelTemplate>
</ListView.ItemsPanel>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPFListView是一个非常强大的控件,它可以用于呈现列表数据。数据绑定WPF编程中的一个核心概念,通过数据绑定可以将数据和UI元素进行关联。下面是一个简单的例子,演示如何使用ListView进行数据绑定。 1. 创建一个数据模型类 首先我们需要定义一个数据模型类,用于表示每个列表项的数据。例如,我们可以定义一个Person类,包含Name和Age属性。 ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } } ``` 2. 创建一个ViewModel类 接下来,我们需要创建一个ViewModel类,用于管理ListView的数据源。例如,我们可以定义一个PeopleViewModel类,包含一个ObservableCollection<Person>类型的People属性,用于存储所有的Person对象。ObservableCollection是一个特殊的集合类,它可以自动通知UI元素数据源的变化。 ```csharp public class PeopleViewModel { public ObservableCollection<Person> People { get; set; } public PeopleViewModel() { People = new ObservableCollection<Person>(); People.Add(new Person { Name = "Tom", Age = 20 }); People.Add(new Person { Name = "Jerry", Age = 30 }); People.Add(new Person { Name = "Mickey", Age = 25 }); } } ``` 3. 在XAML中创建ListView控件 在XAML中创建ListView控件,并通过ItemsSource属性将其与ViewModel的People属性进行绑定。可以使用DataTemplate定义每个列表项的UI元素。 ```xml <ListView ItemsSource="{Binding People}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Age}" /> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 4. 在窗口代码中设置DataContext 最后,在窗口代码中设置DataContext为PeopleViewModel的实例。 ```csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new PeopleViewModel(); } } ``` 这样,当窗口加载时,ListView就会自动显示ViewModel的People属性中的所有数据。当数据发生变化时,ListView也会自动更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值