Я изо всех сил пытаюсь понять, где я ошибаюсь в проекте MVVM WPF. Я пытаюсь создать пользовательскую команду contextmenu. У меня есть рабочее пространство, которое является представлением, внутри HCC в моем MainWindow. Рабочая область (ProductRecordView) содержит список, заполненный наблюдаемой коллекцией с помощью viewmodel (ProductRecordViewModel). Контекст данных задается Option 8, в MainWindowResources XAML. Таким образом, я создал Контекстное в PRV следующим образом:Связывание контекстного меню в проекте MVVM WPF
<ListView.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Delete" Command="{Binding Path=DeleteRecord}"/>
</ContextMenu>
</ListView.ContextMenu>
и в PRVM у меня есть следующие вещи:
#region Presentation Properties
public ICommand DeleteRecord
{
get
{
if (_deleteMe == null)
{
_deleteMe = new RelayCommand(
param => this.Delete(),
param => this.CanDelete
);
}
return _deleteMe;
}
}
#endregion Presentation Properties
#region Public Methods
public void Delete()
{
MessageBox.Show("Test Execute");//this is just for testing the binding of Delete
}
#endregion Public Methods
#region Private Helpers
bool CanDelete = false; //this is just for testing the binding of CanDelete
#endregion Private Helpers
При запуске приложения и щелкните правой кнопкой мыши на элемент в списке view, мне представлено контекстное меню, как описано в первом фрагменте, однако оно не является обязательным, как предполагалось, поскольку ни один из связанных результатов не возникает. Как я правильно связываю в этом случае, что я делаю неправильно?
DataContext из ProductRecordView устанавливается в MainWindowResources следующим образом:
<DataTemplate DataType="{x:Type vm:ProductRecordViewModel}">
<vw:ProductRecordView />
</DataTemplate>
Я знаю, что это DataContext работает как задумано, как будто я пытаюсь создать кнопку в окне и назначить привязки данных к нему, связывание прекрасно работает и выполняет команду в ProductRecordViewModel
Проверьте окно вывода, вероятно, вы имеете ошибку привязки. Можете ли вы предоставить это? Кроме того, использование RelativeSource Self не выглядит правильным, уверены, что вы привязываетесь к правильному элементу? –
@MikeEason Да, я должен был, наверное, сказать в моем вопросе; вот ошибка: Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство 'DeleteRecord' не найдено в 'object' '' ListCollectionView '(HashCode = 12713695)'. BindingExpression: Path = DeleteRecord; DataItem = 'ListCollectionView' (HashCode = 12713695); целевым элементом является «MenuItem» (Name = ''); target свойство - «Command» (тип «ICommand»), но я понятия не имею, что это значит или как его исправить :( –
определить x: имя на вашем представлении и в MenuItem write – puko