WPF, как получить привязанное свойство в коде позади - PullRequest
0 голосов
/ 02 марта 2020

В моем старом проекте мне нужно получить имя свойства привязки через код. XAML:

<DataGridTextColumn MinWidth="180" MaxWidth="180" Width="Auto" Binding="{Binding ConfigObject.MAC_Descr}" Header="Descr" Foreground="Black">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="Padding" Value="6,12" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsDirty}" Value="True">
                    <Setter Property="TextBlock.Background" Value="{StaticResource IsDirtyColor}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="TextBox">
            <Setter Property="Background" Value="White"/>
            <Setter Property="Padding" Value="5,12"/>
            <Setter Property="BorderThickness" Value="0"/>
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>

Событие, которое я использую:

private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
    if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
    {
        DataGridCell row = sender as DataGridCell;
        if (row == null) return;

        // Binding column name??
        string bindingExpression = row.GetBindingExpression(TextBlock.TextProperty).ResolvedSourcePropertyName;
    }
}

В основном в приведенном выше случае мне нужно получить "MAC_Descr". Любая помощь?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Приведите Content ячейки к TextBox или TextBlock в зависимости от того, доступна ли ячейка для редактирования:

DataGridCell row = sender as DataGridCell;
if (row == null) return;

TextBox textBox = row.Content as TextBox;
if (textBox == null) return;

string bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty)
    .ResolvedSourcePropertyName;
1 голос
/ 02 марта 2020

Вы можете попробовать что-то вроде этого:

private void OnCellDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
    {
        if (!(sender is DataGridCell cell)) return;
        if (!(cell.Column is DataGridTextColumn column)) return;
        if (!(column.Binding is Binding binding)) return;

        var path = binding.Path.Path;
    }            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...