1

大家好。如果有不清楚的地方,请告诉

我有 dataGrid 和 TreeView。我已将数据库加载为实体数据模型和一些表。这些表之一“关系”应该显示给数据网格。但它的(关系表)列依赖于其他表,如系统、型号、功能和设备。在数据网格中应该有 4 列,其中包含这些系统、模型、功能和设备的名称。(应该是图片1)

问题在这一切如何显示。数据源不能很好地工作......见图 2。

<Grid DataContext="{StaticResource relationsViewSource}">
        <DataGrid AutoGenerateColumns="True" Name="gridInventory" HorizontalContentAlignment="Right" Margin="255,12,12,128" ItemsSource="{Binding}" />
        <StackPanel Height="391" HorizontalAlignment="Left" Margin="10,10,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="239" DataContext="{StaticResource systemsViewSource}" >
            <TreeView Height="391" Name="treeView1" Width="239" VerticalContentAlignment="Top" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding}" />
        </StackPanel>
    </Grid>

图片1: 在此处输入图像描述

图2: 在此处输入图像描述

在此处输入图像描述

4

2 回答 2

3

您将 theTreeView和一些DataGrid列绑定到一个对象,但没有告诉 WPF 如何绘制该对象。当 WPF 不知道如何绘制object时,它默认使用TextBlock绑定Text到对象的.ToString()

您需要设置ItemTemplate来告诉 WPF 如何绘制您的单个对象,例如:

<TreeView.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Name}" />
    </DataTemplate>
</TreeView.ItemTemplate>

您还可以使用隐式DataTemplate告诉 WPF 如何绘制特定对象。这只是一个 DataTemplate ,它指定 aDataType而没有 a Key,WPF 将在尝试呈现指定类型的对象时使用它。

如果您想避免删除AutoGenerateColumns="True"和手动指定 DataGrid 的列,这可能是要使用的方法。

<DataGrid.Resources>
    <DataTemplate DataType="{x:Type local:Device}">
        <TextBlock Text="{Binding Name}" />
    </DataTemplate>
</DataGrid.Resources>
于 2013-07-25T12:01:00.720 回答
0

您需要将绑定上的路径设置为要显示的属性的 TreeView,

设备是一个集合,您需要在其中放置一个 Listview 或将显示集合的东西,然后在其上放置一个 DataTemplate 以显示您需要的内容,或者绑定到转换器以返回设备的静态字符串表示列表

或者只是让某人为你做这一切,就像这里的情况一样哈哈

于 2013-07-25T11:51:26.640 回答