-->

结合上一个DataGrid视图和视图模型(Binding View and ViewModel on

2019-10-19 20:23发布

我使用的是查看和视图模型上已经存在的视图模型设置。 可以说,与放置在第二视图模型的基础。

当放置另一个视图模型中的根本视图模型MainViewModelBrowseViewModel此特定示例中),相关联的视图模型不显示。

执行标准如下:

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>

今天我将另一个视图模型到的现有基本视图模型时遇到的相同问题MainViewModel 。 如果我没有一个基本的视图模型,如果我使用的电流MainViewModel ,一切正常恰如其分。

注:我告诉卡利寻找在以前命名的命名空间观及其的ViewModels,这是没有问题的。

Answer 1:

看来你在BrowseView结合东西到DataGrid是否正确?

声明类似

<ContentControl x:Name="ListingViewModel"/>

是声明的简写

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

因此我假设(它已经有一段时间,因为我在WPF工作过),其在DataContext在RowDetailsTemplate不BrowseViewModel但不管你绑定到DataGrid。



Answer 2:

尝试这个...

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

这应该让你的BrowseView并据此进行绑定,因为MainViewModel持有BrowseViewModel支撑应该正确绑定。 这假定<ProjectName>.Views.BrowseView命名空间和<ProjectName>.ViewModels.BrowseViewModel ,同样与ListingViewModel



文章来源: Binding View and ViewModel on a DataGrid