我尝试使用带有DependencyProperty绑定的自定义控件来处理DataGrid中的列。一切都在努力,直到我选择一行。
我的自定义控件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的绑定仅在没有选择放置它的行时才有效。
任何想法? 提前致谢
答案 0 :(得分:0)
在ShiftControl中,您设置的DataBinding是不够的。仅为绑定提供路径会尝试将值绑定到当前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"/>