powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM привязка команд, не могу разобраться
13 сообщений из 13, страница 1 из 1
MVVM привязка команд, не могу разобраться
    #37689794
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Пишу программу с использованием WPF, паттерн MVVM. Наткнулся на такую проблему:
Дано:
1. Вью модель TempPriceDetailViewModel.
2. Вьюшка для модели из пункта 1. TempPriceDetailView.
Внутри вьюшки написаны 2 команды реализующие функционал Next/Prev запись. Все работает отлично!

Проблема:
Добавляю на TabControl в мейн окне 2 подряд вью модели из пунка 1. В итоге команды работают, но работают ТОЛЬКО для какой то одной из вью моделей в какой бы из них не делался клик.
Т.е.: Добавляю 2 вью модели и где бы я не кликал по кнопкам Next/Prev они будут отрабатывать только для первой добавленной.
Еще странность в следующем, если добавить не 2 подряд, а между ними вызвать какую нибудь другую вью модель, то кнопки перестают работать на первой вью модели и отрабатывают для второй(даже при клике в первой).

Постарался излагать по максимуму подробно, подскажите в чем ошибка, легко можно и в клике кнопки обрабатывать переключение, но командами удобнее и мало ли где в более сложной ситуации проявится подобное поведение, приятного будет мало...

XAML разметка с привязкой команд, ненужные детали опущенны:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<UserControl x:Class="UTMShop3.View.PriceCompareView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="457" d:DesignWidth="782"
             xmlns:view="clr-namespace:UTMShop3.View"
             [color=red]x:Name="usPriceCompare"[/color] Loaded="usPriceCompare_Loaded">

    <UserControl.Resources>
        <!--Прайс поставщика-->
        <CollectionViewSource x:Key="cvsTempPrice" Source="{Binding Data}"/>
    </UserControl.Resources>
...
        </HeaderedContentControl>
        <!--Кнопки управления-->
        <DockPanel Grid.Row="2" LastChildFill="False" HorizontalAlignment="Center">
            <Button x:Name="btnPrev" Content="Предыдущий" Command="{Binding ElementName=usPriceCompare, Path=GoPrevious}"/>
            ...
            <Button x:Name="btnNext" Content="Следующий" Command="{Binding ElementName=usPriceCompare, Path=GoNext}"/>
        </DockPanel>
    </Grid>
</UserControl>



Код команд, может будет полезным(хотя врятли):

/// <summary>
/// Перейти к следующему элементу
/// </summary>
public RelayCommand GoNext
{
get {
if (_GoNext == null)
_GoNext = new RelayCommand(GoNext_Executed, GoNext_CanExecute);
return _GoNext;
}
}RelayCommand _GoNext;

/// <summary>
/// Выполнение команды перехода к следующему элементу
/// </summary>
/// <param name="parameter"></param>
void GoNext_Executed(Object parameter)
{
TempPriceDetailDefaultView.MoveCurrentToNext();
}

/// <summary>
/// проверка возможности выполнения перехода к следующему элементу
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
bool GoNext_CanExecute(Object parameter)
{
if (TempPriceDetailDefaultView != null)
return TempPriceDetailDefaultView.CurrentPosition < TempPriceDetailDefaultView.Count - 1;
return false;
}

/// <summary>
/// Перейти к следующему элементу
/// </summary>
public RelayCommand GoPrevious
{
get
{
if (_GoPrevious == null)
_GoPrevious = new RelayCommand(GoPrevious_Executed, GoPrevious_CanExecute);
return _GoPrevious;
}
}RelayCommand _GoPrevious;

/// <summary>
/// Выполнение команды перехода к следующему элементу
/// </summary>
/// <param name="parameter"></param>
void GoPrevious_Executed(Object parameter)
{
TempPriceDetailDefaultView.MoveCurrentToPrevious();
}

/// <summary>
/// проверка возможности выполнения перехода к следующему элементу
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
bool GoPrevious_CanExecute(Object parameter)
{

if (TempPriceDetailDefaultView != null)
return TempPriceDetailDefaultView.CurrentPosition > 0;
return false;
}
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37689957
авторДобавляю на TabControl в мейн окне 2 подряд вью модели из пунка 1.

Код в студию.
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37689979
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связывание должно быть не через ElementName(разные View c одинаковыми именами) и это не MVVM(команды должны быть в ViewModel). Делай или relative binding или нормальный MVVM.
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37690297
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVaСвязывание должно быть не через ElementName(разные View c одинаковыми именами) и это не MVVM(команды должны быть в ViewModel).

Эти команды это вопрос отображения данных, тем более ходим с одной записи на другую через ListCollectionView(его передавать во ViewModel? Как?) полученный от CollectionViewSource. Поэтому команды были засунуты в морду. Лепить непонятно зачем во ViewModel'и переходы не вижу смысла... куча подпорок просто.

SeVaДелай или relative binding или нормальный MVVM.


в чем разница в моем случае, через RealtiveSource вязаться или через ElementName? Тем более что аналогичное поведение и через relative.
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37690437
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Если непонятно зачем ViewModel, то зачем его упоминать? Судя, по Loaded="usPriceCompare_Loaded" им здесь не пахнет.
2. Именование - дурной тон это раз, а вовторых - с ним не работает
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691094
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понял, то можно команды разместить в вьюмодели и добавить в нее же(вьюмодель) SelectedItem, который надо забиндить на SelectedItem вьюшки. И в командах изменять вьюмодельный SelectedItem.

По крайней мере я так делаю )
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691124
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa1.Если непонятно зачем ViewModel, то зачем его упоминать? Судя, по Loaded="usPriceCompare_Loaded" им здесь не пахнет.
2. Именование - дурной тон это раз, а вовторых - с ним не работает

SeVa,
пожалуйста, сбавьте спесь, я описал ситуацию, задал конкретный вопрос, и хотел бы на него получить ответ. Подход к реализации это моё дело, я считаю, что чрезмерная педантичность в использовании паттернов только вредна, тем более я указал почему я решил делать именно в морде переход по записям.

Судя, по Loaded="usPriceCompare_Loaded" им здесь не пахнет

здесь получаю DefaultView для моей коллекции данных. Еще раз повторяю подход к реализации это мое дело.

2. ... а вовторых - с ним не работает
сказал "А", говори "Б" - по какой причине с ним не работает? Это и будет ответ на мой вопрос и тему можно будет смело закрывать.
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691128
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sky DragonЕсли я правильно понял, то можно команды разместить в вьюмодели и добавить в нее же(вьюмодель) SelectedItem, который надо забиндить на SelectedItem вьюшки. И в командах изменять вьюмодельный SelectedItem.

По крайней мере я так делаю )

Дело в том, что тут потребуется дополнительная подпорка в виде какого нибудь ItemsControl'а на SelectedItem которого я смогу забиндить SelectedItem определенный во вью модели. Можно конечно так подойти к делу(во всех остальных вьюшках используется именно такой подход), но вопрос в другом, почему не работает мой подход, меня просто пугает, что можно наткнуться на такую же ситуацию в менее явном виде и тогда придется долго долго выяснять в чем дело.

... И в командах изменять вьюмодельный SelectedItem. ...


а тут ситуация в следующем, непонятно как ходить по записям, в ListCollectionView предоставляемым CollectionViewSource'ом предоставляются удобные методы MoveCurrentNext(), MoveCurrentPrevious() у коллекции данных ObservableCollection<T> таких методов нет и нет текущего элемента.
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691131
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пришла в голову мысль немного доработать ObservableCollection и добавить ей функционал перехода по записям, как раз таки тогда можно смело переносить команды во ВьюМодель и конретная ситуация будет решена. Но вопрос все таки остается отрытым, в чем ошибка?
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691178
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010но вопрос в другом, почему не работает мой подход, меня просто пугает, что можно наткнуться на такую же ситуацию в менее явном виде и тогда придется долго долго выяснять в чем дело.


Посмотрел более внимательно на твой бред в первом топике - в огороде бузина, а в Киеве дядька. Ты был прав, код твоих команд совершенно бесполезен. Сбавь спесь, садись за буквари
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691237
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVaxpoft2010но вопрос в другом, почему не работает мой подход, меня просто пугает, что можно наткнуться на такую же ситуацию в менее явном виде и тогда придется долго долго выяснять в чем дело.


Посмотрел более внимательно на твой бред в первом топике - в огороде бузина, а в Киеве дядька. Ты был прав, код твоих команд совершенно бесполезен. Сбавь спесь, садись за буквари

Конструктивно, красавец!

2. ... а вовторых - с ним не работает

сказал "А", говори "Б" - по какой причине с ним не работает? ...


стало быть услышал звон, не знаю где он.
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691277
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще похами, тогда я точно, все брошу и начну чинить твой бред
...
Рейтинг: 0 / 0
MVVM привязка команд, не могу разобраться
    #37691297
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVaЕще похами, тогда я точно, все брошу и начну чинить твой бред

Слушай, торжественно освобождаю тебя от необходимости "чинить" как ты выражаешься мой бред. Пока я от тебя ни слова дельного не услышал.

1.Если непонятно зачем ViewModel, то зачем его упоминать? Судя, по Loaded="usPriceCompare_Loaded" им здесь не пахнет.

с чего такой вывод непонятно, я тебе дал ответ почему так делаю.

2. Именование - дурной тон это раз, а вовторых - с ним не работает

Почему с ним не работает ты уже 2 раза не ответил, из чего я сделал вывод что ты сам не знаешь.

Где хамство с моей стороны?

Еще похами, тогда я точно, все брошу и начну чинить твой бред

а вот это уже хамство.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM привязка команд, не могу разобраться
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]