我有这个列表框:
<ListBox DockPanel.Dock="Left" HorizontalAlignment="Left" Width="150"
ItemsSource="{Binding PcConfigurations, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding LocalConfigurationCommand}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
当我运行应用程序时,我在输出中遇到了这个错误:
System.Windows.Data Error: 40 : BindingExpression path error: 'LocalConfigurationCommand' property not found on 'object' ''PcConfiguration_0CC914504C64AE357F440BEA28C5F73FD3627331B5E407B6D7DD75076453D393' (HashCode=20396001)'. BindingExpression:Path=LocalConfigurationCommand; DataItem='PcConfiguration_0CC914504C64AE357F440BEA28C5F73FD3627331B5E407B6D7DD75076453D393' (HashCode=20396001); target element is 'EventToCommand' (HashCode=27147755); target property is 'Command' (type 'ICommand')
我猜这是因为
的当前路径EventToCommand Command =“{Binding LocalConfigurationCommand}”....
正在寻找设置为列表框在其绑定中设置的“位置”。
所以我想问一下如何将ViewModel的位置放在那里,以便找到该命令,但CommandParameter={Binding}
中的位置仍然是ListBox中的当前项。
答案 0 :(得分:3)
viewmodel实际上是ListBox
的数据上下文,您可以使用ListBox
来访问RelativeSource
:
<cmd:EventToCommand Command="{Binding Path=DataContext.LocalConfigurationCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
CommandParameter="{Binding}"/>