Привет всем. Хотел бы узнать 2 момента по поводу MVVM + WPF. Первый момент легкий, хотел бы узнать, как передать в команду параметр, при срабатывании, на самого себя, через XAML. У меня есть такой код:
<ItemsControl ItemsSource="{Binding CurrentProducts}">
...
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Command="{Binding RequestCalculatorPriceProduct}" CommandParameter="{?????}"/>
</DataTemplate>
</ItemsControl.Template>
...
</ItemsControl>
Соответственно CurrentProducts
- является коллекцией объектов IEnumerable<ProductViewModel>
. У каждый ProductViewModel
выглядит так:
public class ProductViewModel : BaseViewModel
{
public Int64 Id { get; set; }
public string Name { get; set; }
public string Foto { get; set; }
public ICommand RequestCalculatorPriceProduct { get; }
public ProductViewModel( Int64 id, string name, string foto )
{
Id = id;
Name = name;
Foto = foto;
RequestCalculatorPriceProduct = new RelayCommand<ProductViewModel>( OnCalculatorPriceProductRequest );
}
private void OnCalculatorPriceProductRequest( ProductViewModel currentProduct )
{
...
}
}
Мне нужно в обработчике OnCalculatorPriceProductRequest
в параметре принимать ссылку на самого себя.
Итак, из вышесказанного уже видно что подход не достаточно верный, поэтому я сразу задаю вопрос на второй момент, который очень тесно связан с предыдущим:
Коллекция IEnumerable<ProductViewModel> CurrentProducts
у меня лежит во ViewModel
страницы. Так вот, мне на самом деле бы хотелось, чтобы команда, которая сейчас в ProductViewModel
была именно в ViewModel
страницы, и при срабатывании команды, обработчик в параметре имел тот объект ProductViewModel
, по которому щелкнули.
Как бы я не старался это сделать, у меня не получается.
Вот примерный код ViewModel
страницы:
public class MainPageViewModel : BasePageViewModel
{
...
public IEnumerable<ProductViewModel> CurrentProducts
{
get { ... }
set { ... }
}
public ICommand RequestCalculatorPriceProduct { get; }
...
public MainPageViewModel()
{
RequestCalculatorPriceProduct = new RelayCommand<ProductViewModel>( OnCalculatorPriceProductRequest );
...
}
private void OnCalculatorPriceProductRequest( ProductViewModel currentProduct )
{
// Я хочу вот тут получать выбранный ProductViewModel
}
...
}
Но с той разметкой XAML, которую я показал выше, это не работает. Команда вообще не срабатывает. Подскажите в чем может быть проблема? И как реализовать следующие моменты, которые я описал
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется планшет c микросхемой управления питанием AXP288, нужно программно получить напряжение с батареи без использования стандартных драйверов...
WinForms добавляю picturebox а в него круглую картинку, но при этом контейнер остаётся прямоугольнымКогда на picturebox вешаю onClick, то появляются пустые...