Я видел несколько подобных вопросов для моего, поэтому, пожалуйста, не ускользайте его. Сценарий здесь кажется другим, и я не понимаю, почему это было бы неправильно. Мои DataGrid
имеют некоторые привязки к клавишам и щелчкам мыши:Ошибка пути BindingExpression: свойство '' не найдено в 'текущем элементе коллекции' ... BindingExpression: Path = /;
<DataGrid x:Name="gridStudents" ItemsSource="{Binding Source={StaticResource cvsStudentList}}"
Margin="2"
Height="250"
SelectedItem="{Binding SelectedStudentItem, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" IsReadOnly="True" IsSynchronizedWithCurrentItem="True" SelectionChanged="gridStudents_SelectionChanged">
<DataGrid.InputBindings>
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding EditStudentButtonClickCommand}"
CommandParameter="{Binding /}" />
<KeyBinding Key="Delete" Command="{Binding DeleteStudentButtonClickCommand}" />
</DataGrid.InputBindings>
я нашел методологию благодаря StackOverflow и существующим взносам пользователей. Очень признателен.
Эта проблема относится к MouseBinding CommandParameter
. Программа отлично работает без предупреждений. Я могу дважды щелкнуть любую строку в DataGrid
, и она будет вести себя так, как она была разработана.
Но если я проверяю Output окна в Visual Studio 2015 я могу видеть это замечание:
System.Windows.Data Error: 40 : BindingExpression path error: '' property not found on 'current item of collection' ''OCLMEditorModelView' (HashCode=43686667)'. BindingExpression:Path=/; DataItem='OCLMEditorModelView' (HashCode=43686667); target element is 'MouseBinding' (HashCode=49684624); target property is 'CommandParameter' (type 'Object')
Почему это говорит? Я использовал /
, потому что ItemSource
- это объект CollectionViewSource
, и я понял, что/вызывает выбранный элемент. Но эта команда не должна срабатывать, пока я на самом деле дважды не щелкнул строку.
Любопытно, как я могу остановить это появление в моем окне вывода.
Если я пытаюсь изменить связывание в соответствии с ответом я получаю это исключение:
Update:
Вот текущий XAML:
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding EditStudentButtonClickCommand}"
CommandParameter="{Binding /, Source={RelativeSource Self}}" />
Но теперь Я замечаю это в окне вывода:
System.Windows.Data Error: 40 : BindingExpression path error: '' property not found on 'current item of collection' ''RelativeSource' (HashCode=472027)'. BindingExpression:Path=/; DataItem='RelativeSource' (HashCode=472027); target element is 'MouseBinding' (HashCode=36454430); target property is 'CommandParameter' (type 'Object')
Кажется, что это работает (я могу дважды щелкнуть строку, и она делает то, что я хочу). Могу ли я остановить это предупреждение вывода?
Update:
Так это текущий XAML:
<DataGrid x:Name="gridStudents" ItemsSource="{Binding StudentsView}"
Margin="2"
Height="250"
SelectedItem="{Binding SelectedStudentItem, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" IsReadOnly="True" IsSynchronizedWithCurrentItem="True" SelectionChanged="gridStudents_SelectionChanged">
<DataGrid.InputBindings>
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding EditStudentButtonClickCommand}"
CommandParameter="{Binding /, Source={RelativeSource Self}}" />
<KeyBinding Key="Delete" Command="{Binding DeleteStudentButtonClickCommand}" />
</DataGrid.InputBindings>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</DataGrid.CellStyle>
Что я tryign делать не изменилось - когда пользователь дважды щелкает DataGrid строку (которая boudn к CVS) он вызывает команду, основанную на этой строке.
Не используйте 'Convert.ChangeType', просто напишите параметр' (T)'. –
Расширение 'RelativeSource' * действует только для свойства' RelativeSource' * *, а не 'Source'. Также 'RelativeSource Self' будет ссылаться на' MouseBinding', который, безусловно, не является вашей коллекцией, что вы даже делаете ... –
@ H.B. Обновленный вопрос (внизу). –