【问题标题】:Binding a DataContext inside ListView [duplicate]在 ListView 中绑定 DataContext [重复]
【发布时间】:2022-03-01 16:20:13
【问题描述】:

我正在尝试通过另一个控件 (PanelList.xaml/PanelListViewModel.cs) 的 ListView 设置 UserControl (Panel.xaml/PanelViewModel.cs) 的 DataContext。

我有以下 ViewModel:

public class PanelListViewModel
    {
        public List<PanelViewModel> Apps { get; set; } = new List<PanelViewModel>
        {
            new PanelViewModel
            {
                ApplicationName = "App 1",
                ApplicationVersion = "v. 1.0.3",
                IsInstalled = true
            },
            new PanelViewModel
            {
                ApplicationName = "App 2",
                ApplicationVersion = "v. 1.0.3",
                IsInstalled = false
            }
        };
    }

并拥有以下UserControl:

<UserControl.DataContext>
    <vm:PanelListViewModel/>
</UserControl.DataContext>

<ListView ItemsSource="{Binding Apps}">

        <ListView.ItemTemplate>

            <DataTemplate>

                    <local:Panel DataContext="{Binding}"
                                           VerticalAlignment="Center"
                                           HorizontalAlignment="Center"/>

            </DataTemplate>

        </ListView.ItemTemplate>

    </ListView>

它最初在 VS 的设计器预览窗口中工作,但是一旦我构建它,DataContext 绑定就不再工作了。请帮忙:)

【问题讨论】:

  • 您通常不应该显式设置 UserControl 的 DataContext。假设您为 Panel 控件执行此操作(类似于您为 PanelList 执行的操作),DataContext="{Binding} 不会按照您的预期执行。除此之外,DataContext="{Binding}"这个表达式总是多余的。
  • @Clemens 你所说的成功了。我不知道他们之间有冲突。我是新手,如何将您的评论标记为答案?
  • 这是一个常见的问题,因为互联网上有很多“教程”在传播这个编程错误。我已将问题标记为重复。
  • 还要注意没有理由使用 ListView,除非你设置了它的 View 属性。否则使用更简单的基类 ListBox。

标签: c# wpf xaml data-binding


【解决方案1】:

您能否为 ListView 设置一个“x:Name”并在加载事件中尝试以下代码,也许会有所帮助:

C#代码:

myListView.DataContext = Apps;

XAML 代码:

<ListView ItemsSource="{Binding Apps}" x:Name="MyListView">

【讨论】:

  • 感谢您的回复,但这也不起作用。 ListView DataContext 设置正确,但 ListView 项是自定义 UserControl,这是我要设置 DataContext 的地方
  • myListView.DataContext = Apps;ItemsSource="{Binding Apps}" 结合使用没有意义。
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多