C# WPF 在 DataGrid 中使用具有属性绑定的自定义用户控件



我尝试对 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"/>

相关内容

  • 没有找到相关文章

最新更新