Связывание View и ViewModel в DataGrid

Я использую View и ViewModel, установленные на уже существующей ViewModel. Можно сказать, что это основа со второй ViewModel, размещенной на нем.

При размещении другой ViewModel в базовой ViewModel из MainViewModel (BrowseViewModel в данном конкретном примере) связанная ViewModel не отображается.

Реализация следующим образом:

class MainViewModel : PropertyChangedBase
{
    private BrowseViewModel _BrowseViewModel= new BrowseViewModel();

    public BrowseViewModel BrowseViewModel
    {
        get { return _BrowseViewModel; }
        set
        {
            if (_BrowseViewModel== value) return;
            _BrowseViewModel= value;
            NotifyOfPropertyChange("BrowseViewModel");
        }
    }
}

class BrowseViewModel: PropertyChangedBase
{
    private ListingViewModel _ListingViewModel = new ListingViewModel();
    public ListingViewModel ListingViewModel
    {
        get { return ListingViewModel; }
        set
        {
            if (_ListingViewModel == value) return;
            _ListingViewModel = value;
            NotifyOfPropertyChange("ListingViewModel");
        }
    }
}

ListingViewModel...

(Я вырезал неуместный код здесь)

Реализация в моей разметке (MainView):

<ContentControl x:Name="BrowseViewModel"/>

И в BrowseView:

<DataGrid.RowDetailsTemplate>
     <DataTemplate>
         <ContentControl x:Name="ListingViewModel"/>
      </DataTemplate>
</DataGrid.RowDetailsTemplate>

Я столкнулся с той же самой проблемой сегодня, когда добавлял другую ViewModel в существующую базовую ViewModel MainViewModel, Если у меня нет базовой ViewModel и если я использую текущий MainViewModelвсе работает правильно.

Примечание: я сказал Caliburn искать Views и их ViewModel в ранее названных пространствах имен, это не проблема.

2 ответа

Решение

Похоже, что вы связываете что-то с DataGrid в BrowseView правильно?

Объявить что-то вроде

<ContentControl x:Name="ListingViewModel"/>

это сокращенная версия объявления

<ContentControl cal:View.Model="{Binding ListingViewModel" />

Поэтому я предполагаю (давно я работал в WPF), что DataContext в RowDetailsTemplate - это не BrowseViewModel, а то, что вы привязываете к DataGrid.

Попробуй это...

<ContentControl cal:View.Context="BrowseView" cal:View.Model="BrowseViewModel" />

это должно получить ваш BrowseView и связать соответственно, так как MainViewModel содержит реквизит BrowseViewModel, он должен связываться правильно. Это предполагает <ProjectName>.Views.BrowseView пространство имен и <ProjectName>.ViewModels.BrowseViewModelТочно так же с ListingViewModel

Другие вопросы по тегам