2017-03-28 33 views
-1

我尝试使用带有DependencyProperty绑定的自定义控件来处理DataGrid中的列。一切正在进行中,我选择了一排。在DataGrid中使用自定义UserControl和属性绑定的C#WPF

我的自定义控件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); } 
    } 
} 

,我使用ShiftControl在DataGrid window.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

这似乎只是与TextBlocks问题。使用相同绑定的标签,按钮或文本框没有问题。 –

+0

请参阅http://stackoverflow.com/questions/9035878/implicit-styles-in-application-resources-vs-window-resources。如果没有一个好的[mcve]是不可能的,但根据你的评论,你的问题似乎可能是该问题的重复。 –

回答

0

在您的ShiftControl中设置的DataBinding是不够的。只给Path进行绑定尝试将值绑定到当前的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"/> 
+0

是不是在代码背后设置我的DataContext足够? () in ShiftControl.xaml.cs 'public ShiftControl() { InitializeComponent(); tbShift.DataContext = this; }' –