【发布时间】: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