【发布时间】:2020-10-12 09:44:15
【问题描述】:
我正在 WPF 中处理 ListView,我希望 ListView 从 ViewModel 获取 ItemLists 但我收到以下错误
无法在属性元素上设置属性
xml代码:
<ListView ItemsSource="{Binding MenuItems}" Name="mainSideMenuList" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="#FF284593" Foreground="#FF3457D1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction
Command="{Binding Command}"
CommandParameter="{Binding ElementName=mainSideMenuList, Path=SelectedItem}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.ItemTemplate Height="60">
<DataTemplate>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="{Binding IconKind}" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" Margin="10 10" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
视图模型:
private readonly ItemHandler _itemHandler;
private ICommand _command;
public MainWindowViewModel() {
_itemHandler = new ItemHandler();
_itemHandler.Add(new Item("Settings", PackIconKind.Settings));
_itemHandler.Add(new Item("Products", PackIconKind.FoodForkDrink));
_itemHandler.Add(new Item("Tickets", PackIconKind.Ticket));
_itemHandler.Add(new Item("Entities", PackIconKind.Table));
_itemHandler.Add(new Item("Accounts", PackIconKind.Calculator));
_itemHandler.Add(new Item("Inventory", PackIconKind.Database));
_itemHandler.Add(new Item("Printing", PackIconKind.Printer));
_itemHandler.Add(new Item("Reports", PackIconKind.FileAccount));
_itemHandler.Add(new Item("Automation", PackIconKind.Calculator));
_itemHandler.Add(new Item("Users", PackIconKind.User));
}
public List < Item > MenuItems {
get {
return _itemHandler.MenuItems;
}
}
public ICommand Command {
get {
return _command ? ? (_command = new RelayCommand(x => {
DoStuff(x as Item);
}));
}
}
private void DoStuff(Item item) {
MessageBox.Show(item.Name + " element clicked");
}
我做错了什么,我该如何解决?
【问题讨论】:
-
您的 ViewModel 需要实现
INotifyPropertyChanged接口才能让 Bindind 工作。 docs.microsoft.com/en-us/dotnet/framework/wpf/data/… -
我的模型实现了
INotifyPropertyChanged。列表项显示在设计器中,但运行时出现错误 -
ListView.ItemTemplate是 property 而不是 type。属性没有属性,但类型有。属性存储对其类型实例的引用。在 XAML 的 Property Element Syntax 中,<ListView.ItemTemplate>是一个属性元素。知道了这一点,您现在应该能够理解错误消息:“无法在属性元素上设置属性”。
标签: c# wpf xaml listview itemtemplate