Справочная информация: У меня есть таблица данных wpf с пользовательским классом (CustomTextBox
), который наследуется от TextBox
.Я создал объект зависимости (ValueProperty
) в этом пользовательском классе, чтобы я мог связываться с ним.У меня также есть наблюдаемая коллекция, которую я использую как DataSource
для DataGrid
.
Проблема: Проблема заключается в том, что когда я связываю свое свойство зависимости моего пользовательского класса спубличная собственность в наблюдаемой коллекции, ничего не отображается в DataGrid
.
Вот xaml для DataGrid
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
.
Может кто-нибудь, пожалуйста, посмотрите и скажите мне, что я сделал не так.Мой DataGrid
появляется пустым, я знаю, что моя проблема связана с привязкой к объекту зависимости.Здесь приветствуется любая помощь.
РЕДАКТИРОВАТЬ: Я удалил всю логику из свойства setter Value, и я добавил метод обратного вызова, который обрабатывает изменения в объекте зависимости, а также обновленияэто свойство Text.
private static void ValueProperty_OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs eventArgs)
{
CustomTextBox box = d as CustomTextBox;
if (box != null)
{
box.value = Conversions.RoundLeastSignificant(Conversions.RoundLeastSignificant((double)eventArgs.NewValue));
box.Text = Conversions.FormatReadTextValue((double)eventArgs.NewValue, box.behavior, box.acadDocument);
}
}