c# - WPF ListView.ItemsSource 绑定(bind)问题

标签 c# .net mvvm binding

我有一个 MainViewModel 和 Customers 属性(作为 ObservableCollection 的 CustomerViewModel 对象列表)。我想将该列表作为 ItemsSource 绑定(bind)到 ListView 控件。我的 MainViewModel 绑定(bind)到 Window 的 DataContext 属性。我使用 ServiceLocator 模式来创建 MainViewModel 实例,该实例将 IDataService 接口(interface)作为构造函数中的参数。我使用接口(interface)向 MainViewModel 注入(inject)数据服务,并可以在 Blend 中为设计师创建一些测试数据。在 Expression Blend 中一切正常,数据显示正确,但是当我运行代码 ItemsSource 为 null 并且没有绑定(bind)数据时。 DataContext 是正确的。当我将 DataContext 设置为 null 并再次将 MainViewModel 实例 ItemsSource 设置为 Customers 属性时。为什么应用程序启动时它不自动绑定(bind)到客户属性?

<Grid x:Name="LayoutRoot" DataContext="{Binding MainViewModel, Source={StaticResource Locator}}">
    <ListView Margin="12" x:Name="customerList"
              ItemsSource="{Binding Customers}">
        ...
    </ListView>
</Grid>

最佳答案

在创建 View 之前,您的 Locator 的 MainViewModel 是否存在?如果稍后填充它并且您不触发 NotifyPropertyChanged 事件,则绑定(bind)将始终指向它最初绑定(bind)时的空值。

关于c# - WPF ListView.ItemsSource 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684217/

相关文章:

.net - PreserveExistingDefaults 的用途?

c# - Window 中的 ViewModel 和 UserControl 中的 ViewModel 之间的 WPF 数据绑定(bind)

c# - 从ViewModel(MVVM)添加到XAML WPF

c# - 关于堆和栈内存使用的问题

c# - 覆盖 Json.NET 属性序列化/格式

c# - 从委托(delegate)转换为函数

c# - 与 future 的 API 解耦——初学者发现需要依赖注入(inject)

c# - 为什么 block 按此顺序运行?

xamarin - Xamarin MVVM传递对象属性

c# - 检查声音何时结束C#