【问题标题】:How to access ObservableCollection nested in view model如何访问嵌套在视图模型中的 ObservableCollection
【发布时间】:2015-07-02 14:23:10
【问题描述】:

我有一个使用 MVVM 的简单单窗口 WPF 应用程序。 XAML 绑定到我的 MainViewModel.cs 类,其中包含一个 ObservableCollection 站点。现在 SiteModel 类有一个名为 Owners 的属性,其中包含第二个 ObservableCollection 公司。

我需要将我的公司属性绑定到我的 XAML 中的 ComboBox。 ComboBox 嵌套在 DataGrid 中。情况描述如下。

<DataGrid Name="UxSiteGrid" DockPanel.Dock="Top" ItemsSource="{Binding Sites, Source={StaticResource ViewModel}}" AutoGenerateColumns="false" 
              Margin="5,5,5,0" CanUserAddRows="False" CanUserDeleteRows="True" CanUserResizeRows="False" CanUserReorderColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
            <DataGridTextColumn Binding="{Binding VseId}" Header="Vse ID"/>
            <DataGridTextColumn Binding="{Binding IMO}" Header="IMO"/>
            <DataGridComboBoxColumn SelectedItemBinding="{Binding SiteType}" ItemsSource="{local:EnumValues rdsConfigConnector:SiteType}" Header="Site type"/>
            <DataGridTextColumn Binding="{Binding TimePeriod}" Header="Fetching period"/>
            <DataGridTextColumn Binding="{Binding Latitude}" Header="Latitude"/>
            <DataGridTextColumn Binding="{Binding Longitude}" Header="Longitude"/>
            <DataGridTextColumn Binding="{Binding OffsetLatitude}" Header="Offset latitude"/>
            <DataGridTextColumn Binding="{Binding OffsetLongitude}" Header="Offset longitude"/>


            <DataGridTemplateColumn Header="Site Owners">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate >
                        <ComboBox ItemsSource="{Binding Owners.companies}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    DataTemplate 中的数据上下文应该已经是您的站点,因此 {Binding Owners.companies} 应该可以工作(例如,参见 here)。
    请注意,数据绑定是区分大小写的 => 它应该是 {Binding Owners.Companies} 吗?

    如果一切正确:您是否在输出窗口中收到“绑定错误”?

    【讨论】:

    • 是的,您对大小写敏感是正确的,它应该是大写 C。我仍然收到此错误:System.Windows.Data 错误:40:BindingExpression 路径错误:找不到“所有者”属性在'对象'''MainViewModel'(HashCode = 11497055)'。 BindingExpression:Path=Owners.companies; DataItem='MainViewModel' (HashCode=11497055);目标元素是'ComboBox'(名称='');目标属性是“ItemsSource”(类型“IEnumerable”)似乎数据上下文在 MainViewModel 上
    • 嗯,这很奇怪 - 我刚刚签入我的项目,DataTemplate 直接绑定到我的 ItemsSource 中的单个项目。您可以尝试创建一个小型测试应用来测试单个绑定功能吗?
    • 在新项目中工作正常。实际上,我也设法在我当前的应用程序中修复了它,似乎小写字母最终导致了麻烦。我现在觉得有点傻:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多