【问题标题】:C# WPF using custom UserControl with Property Binding in DataGridC# WPF 在 DataGrid 中使用带有属性绑定的自定义 UserControl
【发布时间】:2017-08-21 23:31:21
【问题描述】:

我尝试对 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 window.xaml 中使用 ShiftControl 的代码:

<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 的绑定仅在未选择放置它的行时才起作用。

有什么想法吗? 提前致谢

【问题讨论】:

标签: c# wpf xaml datagrid wpf-controls


【解决方案1】:

在您的 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"/>

【讨论】:

  • 在 Code-Behind 中设置我的 DataContext 还不够吗?在 ShiftControl.xaml.cs public ShiftControl() { InitializeComponent(); tbShift.DataContext = this; }
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多