背景:
我有一个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
并具有两个属性:INotifyPropertyChanged
和DrawingLocationX
。
任何人都可以看看我是否做错了。我的DrawingLocationY
空着,我知道我的问题是绑定到依赖对象。感谢您的帮助。
编辑: 我从Value的setter属性中删除了所有逻辑,并添加了一个回调方法来处理对依赖对象的更改,并更新它的Text属性。
DataGrid
答案 0 :(得分:0)
我设法解决了这个问题。解决方案是我最后的评论: 解决方案是从属性的设置器中删除所有逻辑,并处理在注册依赖项属性时定义的CallBack方法中的设置Value。
这是常规解决方案。希望它对其他人也有帮助。