Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将itemssource传递给从datagrid派生的自定义控件_C#_Wpf_Datagrid_Custom Controls_.net 4.5 - Fatal编程技术网

C# 将itemssource传递给从datagrid派生的自定义控件

C# 将itemssource传递给从datagrid派生的自定义控件,c#,wpf,datagrid,custom-controls,.net-4.5,C#,Wpf,Datagrid,Custom Controls,.net 4.5,我在.NET4.5中使用wpf,我希望有一个数据网格模板嵌入到其他数据模板中。我使用DataTemplateSelector来显示公共父类的子类列表的内容 我只想更改DataGrid的ItemsSource,因为它在每个类中都有不同的属性名 my DataGrid模板中的的的常规绑定可以具有相同的绑定,因为列表始终包含相同的类 因此,我创建了一个从DataGrid派生的自定义类。实际上,它工作得很好,但是当我使用我的自定义类时,我在DataGrid中没有得到任何输出 <y:MultiGe

我在.NET4.5中使用wpf,我希望有一个数据网格模板嵌入到其他数据模板中。我使用DataTemplateSelector来显示公共父类的子类列表的内容

我只想更改DataGrid的ItemsSource,因为它在每个类中都有不同的属性名

my DataGrid模板中的的的常规绑定可以具有相同的绑定,因为列表始终包含相同的类

因此,我创建了一个从DataGrid派生的自定义类。实际上,它工作得很好,但是当我使用我的自定义类时,我在DataGrid中没有得到任何输出

 <y:MultiGeoStruct DataContext="{Binding}" ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}"/>
那么,如何使自定义控件的行为与普通datagrid类似呢。我只是想更改那里的数据源

提前谢谢

内联示例工作正常:

<DataGrid ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}" AutoGenerateColumns="False">
    <DataGrid.RowHeaderTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Path=DataContext.Num, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}}"/>
    </DataTemplate>
    </DataGrid.RowHeaderTemplate>
    <DataGrid.Columns>
        <DataGridTextColumn Header="X" Binding="{Binding X}"/>
        <DataGridTextColumn Header="Y" Binding="{Binding Y}"/>
        <DataGridTextColumn Header="Z" Binding="{Binding Z}"/>
    </DataGrid.Columns>
</DataGrid>

编辑:不是解决方案

埃尔贡佐是对的。我必须设定好时间

 DataContext="{Binding}"
对于我的多重地质结构数据网格

 <y:MultiGeoStruct DataContext="{Binding}" ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}"/>
而且效果很好

非常感谢你的帮助


如果你知道答案,请告诉我。如果我有一个解释,我会更新它。

对于第二个示例(MultiGeoStruct),您在哪里设置它的ItemsSource?请将设置/绑定FlexForCFK.CAD.Controls.MultiGeoStruct的ItemsSource属性的代码添加到您的问题中。编辑完成,感谢您的回答这里是用于绑定MultiGeoStruct.ItemsSource的DataContext集?在我看来,在第一个示例中,用于DataGrid.ItemsSource绑定的DataContext设置正确,而在第二个示例中,用于MutliGeoStruct.ItemsSource的绑定似乎使用了错误的DataContext。您确实在某个地方设置了DataContext
DataContext={Binding}
尝试提取DataContext属性的值并将其放回DataContext。但是,请记住,如果未显式设置DataContext,它将从父框架元素的DataContext属性继承其值。因此,实际上,
DataContext={Binding}
使其提取父框架元素的DataContext属性的值,并将其放入MultiGeoStruct.DataContext中。这实际上与根本不设置MultiGeoStruct.DataContext相同。那么,为什么这种修改会使代码正常工作呢?(续)我能想到的唯一原因是代码背后的一些诡计,或者TreeView的一些非常奇怪的XAML,或者它周围的XAML……它不起作用。它只是返回到autogeneratecolumns,因此显示了内容。但我发现,如果我将列的xaml代码直接放在多重地质结构数据网格的容器中(与普通数据网格类似),那么datacontext是正确的。我的自定义dg没有使用我在自定义控件的xaml代码中定义的模板。我想这就是为什么什么都不显示的原因。此外,如果我在multigeostruct.xaml的xaml代码中将AutoGenerateColumns属性设置为false,则如果我在ModelContentViewer.xaml中插入元素,它将被覆盖为默认值。
 DataContext="{Binding}"
 <y:MultiGeoStruct DataContext="{Binding}" ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}"/>
this.ItemsSource = m;