Я пытаюсь связать listview с List<OrderPaymentVm> OrderPayments
с контекстным меню правой кнопкой мыши, чтобы получить PaymentTransactionId
.Как связать WPF ListView с contextMenu для просмотраModel
Я следующее свойство в своих формах Модельное
public List<OrderPaymentVm> OrderPayments
{
get
{
return _orderPayments;
}
private set
{
_orderPayments = value;
RaisePropertyChanged(() => OrderPayments);
}
}
В ViewModel
public class OrderPaymentVm : ViewModelBase
{
private RelayCommand _copyPaymentTransactionId;
public DateTime PaymentTime { get; set; }
public PaymentType PaymentType { get; set; }
public string Explanation { get; set; }
public string PaymentTransactionId { get; set; }
public decimal Amount { get; set; }
public RelayCommand CopyPaymentTransactionId
{
get { return _copyPaymentTransactionId ?? (_copyPaymentTransactionId = new RelayCommand(ExecuteCopyPaymentTransactionId)); }
}
private void ExecuteCopyPaymentTransactionId()
{
Clipboard.SetText(string.IsNullOrWhiteSpace(PaymentTransactionId) ? string.Empty : PaymentTransactionId);
}
}
У меня есть следующий код XAML
<ListView Grid.Row="1" ItemsSource="{Binding OrderPayments}" HorizontalAlignment="Stretch" Margin="0,0,0,1">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy Transaction Id"
Command="{Binding CopyPaymentTransactionId}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
</ContextMenu>
</ListView.ContextMenu>
<ListView.View>
<GridView>
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Header="Transaction Id" Width="150" DisplayMemberBinding="{Binding PaymentTransactionId}" />
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Header="Time" Width="150" DisplayMemberBinding="{Binding PaymentTime}" />
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Header="Payment Type" Width="100" DisplayMemberBinding="{Binding PaymentType}" />
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Header="Amount" Width="80" DisplayMemberBinding="{Binding Amount, StringFormat='{}{0:C}'}" />
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Header="Explanation" Width="280" DisplayMemberBinding="{Binding Explanation}" />
</GridView>
</ListView.View>
</ListView>
Задача 1 дизайнер XAML говорит, что есть проблема эм с GridViewColumn привязок, он подчеркивает их и говорит, что он не может разрешить собственности, однако он компилируется и работает отлично
Задача 2 ConextMenu Команда не попав в команду ViewModel RelayCommand CopyPaymentTransactionId
Im уверен, что это просто проблемы, тем не менее, вращение моих колес, есть ли у кого-нибудь какие-либо предложения?
Thanks
Дизайнер XAML часто лжет мне об ошибках. Обычно я проверяю свои привязки, просматривая окно вывода во время выполнения. Что касается привязки команды, у меня также возникли проблемы с привязкой команд, которые не запускаются. В результате я неохотно просто пишу код, чтобы обрабатывать события кликов и делать заметку о возможностях рефакторинга позже, когда позволяет время. –
Попробуйте инициализировать вашу команду реле с соответствующим назначением делегата в конструкторе модели представления. –
Спасибо за ваши комментарии, да, я чувствую, что я лгал в отношении проблемы 1 –