在我的应用程序中,我必须在一个屏幕上显示具有相同结构的多个网格控件(我使用DevExpress),因此我决定为这些网格创建UserControl。
<UserControl x:Class="MyApp.GridUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid">
<Border BorderBrush="Black" BorderThickness="1">
<Grid>
<dxg:GridControl SelectionMode="Row"
AutoGenerateColumns="None">
<dxg:GridControl.Columns>
<dxg:GridColumn Header="{x:Static res:Resources.Time}" Binding="{Binding LessonTime}"/>
<dxg:GridColumn Header="{x:Static res:Resources.Lesson}" Binding="{Binding LessonName}"/>
<dxg:GridColumn Header="{x:Static res:Resources.Classroom}" Binding="{Binding Classroom}"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AllowEditing="False" AutoWidth="True" ShowGroupPanel="False">
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</Border>
我希望能够在我的Window的xaml中为此GridControl设置ItemSource。我知道我必须使用DataContext属性来执行此操作,但我不知道如何正确使用它。那么,解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
好的,首先您必须向UserControl
添加一个属性,然后将其用作数据网格的ItemsSource
。这应该是这样的:
public partial class GridUserControl : UserControl
{
public object ItemsSource
{
get { return (object)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(object), typeof(GridUserControl), new PropertyMetadata(null));
//constructor etc.
}
另一种选择是将控件建立在ItemsControl
上,而不是UserControl
- 然后从基类获得ItemsControl
属性。其余的工作方式会有所不同,所以我现在将重点关注UserControl。
下一步是让DataGrid
中的UserControl
使用您为该属性分配的任何内容。不确定您的命名空间是什么,根据需要进行编辑。我只在这里列出相关部分:
<UserControl x:Class="MyApp.GridUserControl"
xmlns:local="clr-namespace:MyApp">
<dxg:GridControl ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource AncestorType=local:GridUserControl}}" />
</UserControl>
然后,在您的窗口上,您可以像这样使用它(仅限相关部分):
<Window x:Class="MyApp.Window1"
xmlns:local="clr-namespace:MyApp">
<Grid>
<local:GridUserControl ItemsSource="{Binding Items1}"></local:GridUserControl>
<local:GridUserControl ItemsSource="{Binding Items2}"></local:GridUserControl>
</Grid>
</Window>
这假设您的Window DataContext
是一个具有相关Items1
和Items2
属性的对象。