#c# #wpf #data-binding
Вопрос:
Я показываю список заказов (каждый заказ-это пользовательский элемент управления) более чем на одной странице. Каждый раз, когда пользователь щелкает левой кнопкой мыши элемент управления, главное окно должно загружаться и отображать заказ на новой странице с помощью команды ICommand.
x:Имя главного окна: Главное окно
Mainviewмодель
Это модель представления, связанная с главным окном.
public class MainViewModel : BaseViewModel
{
public INavigator Navigator { get; set; }
public ICommand OpenOrderCommand { get; set; }
public MainViewModel(INavigator navigator) : base()
{
Navigator = navigator;
OpenOrderCommand = new RelayCommand(OpenOrder);
}
private void OpenOrder(object obj)
{
// Loads the order from db
}
}
Я добавил тег InputBindings в UserControl, чтобы определить, когда пользователь щелкает по нему левой кнопкой мыши.
Пользовательский контроль
<Grid.InputBindings>
<MouseBinding MouseAction="LeftClick"
Command="{Binding DataContext.OpenOrderCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}"
CommandParameter="{Binding OrderId}"/>
</Grid.InputBindings>
Но OpenOrderCommand
никогда не запускается, и я получаю сбой привязки XAML с этим текстом:
Система.Windows.Ошибка данных: 4 : Не удается найти источник для привязки со ссылкой ‘RelativeSource FindAncestor, AncestorType=’Система.Windows.Окно’, уровень предка=’1″. Выражение привязки:Путь=DataContext.OpenOrderCommand; DataItem=null; целевой элемент — «Привязка мыши» (хэш-код=20815867); целевое свойство — «Команда» (тип «ICommand»)
Как я могу выполнить команду главного окна из пользовательского элемента управления?
Обновить
Это прекрасно работает, если я использую текущую страницу вместо главного окна.
<Grid.InputBindings>
<MouseBinding MouseAction="LeftClick"
Command="{Binding DataContext.OpenOrderCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:HomePage}}}"
CommandParameter="{Binding OrderId}"/>
</Grid.InputBindings>
Комментарии:
1. Вы установили значение параметра Background-Peroperty сетки? Если нет, попробуйте установить значение. Прозрачность также должна работать.
2. @Mardukar все еще не работает.
Ответ №1:
В сообщении об ошибке говорится, что он не может найти источник привязки. Попробуй связать его вот так:
<Grid.InputBindings>
<MouseBinding MouseAction="LeftClick"
Command="{Binding OpenOrderCommand}"
CommandParameter="{Binding OrderId}"/>
</Grid.InputBindings>
и установить DataContext следующим образом:
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
В моем тестовом коде Сетка вызывала событие только тогда, когда я явно задавал значение для свойства Фона. Прозрачность также была ценностью, которая работала.