在wpf中重置绑定的源代码

时间:2014-05-09 18:22:35

标签: c# wpf xaml mvvm binding

我有这个列表框:

<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中的当前项。

1 个答案:

答案 0 :(得分:3)

viewmodel实际上是ListBox的数据上下文,您可以使用ListBox来访问RelativeSource

<cmd:EventToCommand Command="{Binding Path=DataContext.LocalConfigurationCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
                    CommandParameter="{Binding}"/>