WPF. Команды в Datacontext

290
08 марта 2017, 16:52

Есть viewmodel.

public class VM_searchResult : DependencyObject, INotifyPropertyChanged
{
    private CCard createdCard;    
    private Commands selectSpravInfo;
    public Commands SelectSpravInfo
    {
         get
         {
            return selectSpravInfo ?? (selectSpravInfo = new Commands(obj =>
              {
               W_selectSprav wSelectSprav = new W_selectSprav(obj as CCard);
               wSelectSprav.ShowDialog();
              }));
         }
    }
    public CCard CreatedCard
    {
        get { return createdCard; }
        set
        {
            createdCard = value;
            OnPropertyChanged("CreatedCard");
        }
    }
}

View

<StackPanel Orientation="Horizontal" DataContext="{Binding CreatedCard}">
       <TextBlock Text="Номер регистрации:" Margin="10,7,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
       <TextBox x:Name="TB_regnum" Text="{Binding Regnum}" Margin="10,7,0,0" VerticalAlignment="Top" MinWidth="90"/>
       <TextBlock Text="База данных:" Margin="10,7,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
       <Button x:Name="B_selectDB_card" Command="{Binding SelectSpravInfo}" CommandParameter="{Binding CreatedCard}" Content="..." Margin="10,7,0,0" VerticalAlignment="Top" Width="20"/>
       <TextBox x:Name="TB_db_card" Text="{Binding Bdncpi._name}" Margin="10,7,15,0" TextWrapping="Wrap" VerticalAlignment="Top" IsEnabled="False" MinWidth="200"/>
</StackPanel>

В такой ситуации, команда SelectSpravInfo ищется в контексте CreatedCard, которой там, собственно нет. Отсюда вопрос, как выйти из этой ситуации? Не гоже как-то прописывать контекст каждому текстбоксу.

Answer 1

Решение. Дал имя вьюшке x:Name="root" и потом использовал его как DataContext="{Binding ElementName=root}" Command="{Binding Path=DataContext.SelectSpravInfo}"

Answer 2

Даем имя элементу у которого DataContext VM_searchResult (там где лежит команда к которой нужно привязаться). Дальше биндим нужное свойство через ElementName

<UserControl x:Name="root"> <!--DataContext устанавливается например сверху -->
    <StackPanel DataContext="{Binding CreatedCard}">    
        <Button Command="{Binding ElementName=root, Path=DataContext.SelectSpravInfo}" CommandParameter="{Binding CreatedCard}"/>      
    </StackPanel>
</UserControl>
READ ALSO
Редактирование модели. Ошибка. The model item passed into the dictionary is of type &#39;System.Data.Entity.DbSet`1[justfortest.Models.Book]&#39;

Редактирование модели. Ошибка. The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[justfortest.Models.Book]'

Пытаюсь создать редактирование моделиВыскакивает ошибка:

290
Как в с# парсить куки созданные в javaScript?

Как в с# парсить куки созданные в javaScript?

Собственно вопрос заданЧасто на сайтах некоторые куки задаются не через Response, динамически при отработке javaScript

233
Сессии пользователя на php

Сессии пользователя на php

Пишу аторизацию пользователя через вк

283
Вывод категорий

Вывод категорий

Как менее нагружённо сделать вывод категорий, на сайте имеется более 100 категорийСделать таблицу в MySQL с названием категорий и ид или записать...

236