Прегледах тази мрежа и Google и решенията не работят за мен.
Имам команда за ViewModel на UserControl. Е, потребителският контрол има ItemsControl, обвързан с ObservableCollection. Вътре в DataTemplate на ItemsControl.ItemTemplate имам бутон и искам да използвам командата. Не мога да обвържа командата, защото вътре в DataTemplate, datacontext не е ViewModel, а елемент от ObservableCollection.
Въпросът е: Как мога да свържа бутона към командата, ако загубих родителския контекст на данни?
Мисля, че това трябва да има лесно решение, защото смятам, че това е често срещан проблем.
Представете си тази сцена:
Имате елемент от ListBox с observableCollection като ItemsSource, така че използвате шаблон за данни вътре в ListBox за всеки елемент в колекцията. Е, искате да изтриете избрания елемент и поставяте бутон във всеки ред за тази задача. Как правиш това?
В MVP мога да направя това в събитието за щракване на бутона:
Button but = e.Source as Button;
if (but != null)
Presenter.ActualNote = but.DataContext as Note;
Накратко. Изпращате контекста на данните на реда (избрания елемент) на представящия.
Но как мога да го направя по mvvm начина? Тъй като трябва да използвам команда, но не мога да присвоя командата на бутона, защото бутонът не знае нищо за ViewModel (където съществува командата).
Както можете да видите, бутонът трябва да съществува в шаблона за данни, тогава контекстът на данните вече не е ViewModel... Ето защо имам нужда от достъп до DataContext на родителя за достъп до командата.
Надявам се, че разбирате проблема ми по-добре.
Благодаря ти.