我尝试对 DataGrid 中的列使用具有 DependencyProperty 绑定的自定义控件。一切都在工作到我选择一行的程度。
我的自定义控件 ShiftControl.xaml:
<UserControl x:Class="xRoster.UserControls.ShiftControl"
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"
xmlns:local="clr-namespace:xRoster.UserControls">
<TextBlock x:Name="tbShift"
Text="{Binding Path=Shift}"
TextWrapping="Wrap"
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</UserControl>
我的 ShiftControl.xaml.cs 代码隐藏:
public partial class ShiftControl : UserControl
{
public ShiftControl()
{
InitializeComponent();
tbShift.DataContext = this;
}
public static readonly DependencyProperty ShiftProperty =
DependencyProperty.Register(
"Shift", typeof(string), typeof(ShiftControl));
public string Shift
{
get { return (string)GetValue(ShiftProperty); }
set { SetValue(ShiftProperty, value); }
}
}
我在 DataGrid 窗口中使用 ShiftControl 的代码.xaml:
<UserControl.Resources>
<DataTemplate x:Key="day1Column">
<uc:ShiftControl Shift="{Binding Day1Shift.Display}"/>
</DataTemplate>
</UserControl.Resources>
<DataGrid ItemsSource="{Binding Employees}"
AutoGenerateColumns="False"
HeadersVisibility="Column"
RowHeight="50">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Montag"
HeaderStyle="{StaticResource columnHeaderStyle}"
CellTemplate="{StaticResource day1Column}"
CellEditingTemplate="{StaticResource day1Column}"/>
</DataGrid.Columns>
</DataGrid>
正如我所说,我的 ShiftControl 的绑定仅在未选择放置它的行时才有效。
有什么想法吗?提前致谢
在 ShiftControl 中,您设置的数据绑定是不够的。仅为绑定提供路径会尝试将值绑定到当前 DataContext 的指定路径(该路径可能会根据控件的使用而更改(
您应该在 ShiftControl.xaml 中显式定义 BindingSource。
试试这个:
<TextBlock x:Name="tbShift"
Text="{Binding Path=Shift,
RelativeSource={RelativeSource
Mode=FindAncestor,
Type={x:Type ShiftControl}}}"
TextWrapping="Wrap"
VerticalAlignment="Center"
HorizontalAlignment="Center"/>