如何将wpf数据网格内的依赖项对象绑定到可观察的集合

时间:2018-09-13 15:04:56

标签: c# wpf data-binding datagrid dependency-properties

背景: 我有一个wpf数据网格,它具有一个自CustomTextBox继承的自定义类(TextBox)。我在此自定义类中创建了一个依赖项对象(ValueProperty),因此可以绑定到它。我还有一个可观察的集合,用作DataSource的{​​{1}}。

问题: 问题是,当我将自定义类的依赖项属性绑定到可观察集合中的公共属性时,DataGrid中什么也没显示。

这里是发生绑定的DataGrid DataGrid xaml

TemplateColumn

这是自定义类中的依赖项属性:

<DataGridTemplateColumn Header="Drawing Location"  Width="240" CellStyle="{StaticResource dataGridCellStyle}">
      <DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
            <Label Content="Drawing Location" Width="230" HorizontalContentAlignment="Center"/>
        </DataTemplate>
    </DataGridTemplateColumn.HeaderTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CustomTextBox:CustomTextBox x:Name="ftbDrawingX" Value="{Binding DrawingLocationX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                             Style="{StaticResource textBox}" Width="85" Behavior="DistanceCombinedFtIn"/>
                <Label Content=","/>
                <CustomTextBox:CustomTextBox x:Name="ftbDrawingY" Value="{Binding DrawingLocationY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                             Style="{StaticResource textBox}" Width="85" Behavior="DistanceCombinedFtIn"/>
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

在后面的代码中:

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(CustomTextBox), 
    new FrameworkPropertyMetadata(0D, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(ValueProperty_OnTextPropertyChanged)));

public double Value
{
    get {return (double)this.GetValue(ValueProperty);}    
    set
    {

    }
}

private ObservableCollection<CustomItem> data = new ObservableCollection<CustomItem>(); this.dgTakeoffDataGrid.ItemsSource = data; 对象实现CustomItem并具有两个属性:INotifyPropertyChangedDrawingLocationX

任何人都可以看看我是否做错了。我的DrawingLocationY空着,我知道我的问题是绑定到依赖对象。感谢您的帮助。

编辑: 我从Value的setter属性中删除了所有逻辑,并添加了一个回调方法来处理对依赖对象的更改,并更新它的Text属性。

DataGrid

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。解决方案是我最后的评论: 解决方案是从属性的设置器中删除所有逻辑,并处理在注册依赖项属性时定义的CallBack方法中的设置Value。

这是常规解决方案。希望它对其他人也有帮助。