C# GetValue(NameProperty)返回&引用;虽然";x:名称“;for UI元素是在XAML中设置的

C# GetValue(NameProperty)返回&引用;虽然";x:名称“;for UI元素是在XAML中设置的,c#,xaml,mvvm,binding,C#,Xaml,Mvvm,Binding,我正在努力实现这一点 我的问题是 (字符串)column.GetValue(NameProperty) 返回“”,尽管我为网格中的每一列设置了名称 <fw:DataGridEx x:Name="LogGrid" Visibility="Visible" DockPanel.Dock="Top" Vertic

我正在努力实现这一点

我的问题是

(字符串)column.GetValue(NameProperty)

返回“”,尽管我为网格中的每一列设置了名称

<fw:DataGridEx x:Name="LogGrid"
                               Visibility="Visible"
                               DockPanel.Dock="Top"
                               VerticalScrollBarVisibility="Auto"
                               SelectionMode="Single"
                               SelectionUnit="FullRow"
                               IsReadOnly="True"
                               AlternatingRowBackground ="Gainsboro"
                               AlternationCount="2"
                               ItemsSource="{Binding Path=LogView, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                               SelectedItem="{Binding Path=LogItem, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                               HiddenColumns="{Binding LogHiddenColumns}"
                               AutoGenerateColumns="False">
                    <i:Interaction.Behaviors>
                        <fw:ScrollIntoViewBehavior/>
                    </i:Interaction.Behaviors>
                    <DataGrid.Columns>
                        <DataGridTextColumn x:Name="logColumnTime"
                                            Header="Time"
                                            Binding="{Binding Time}" />
                        <DataGridTextColumn x:Name="logColumnDirection"
                                            Header="Direction"
                                            Binding="{Binding Direction}" />
                        <DataGridTextColumn x:Name="logColumnData"
                                            Header="Data"
                                            Binding="{Binding Data}" />
                        <DataGridTextColumn x:Name="logColumnSpecifics"
                                            Header="Specifics"
                                            Binding="{Binding Specifics}" />
                        <DataGridTextColumn x:Name="logColumnOverheadData"
                                            Header="Overhead Data"
                                            Binding="{Binding OverheadData}" />
                        <DataGridTextColumn x:Name="logColumnOverheadSpecifics"
                                            Header="Overhead Specifics"
                                            Binding="{Binding OverheadSpecifics}" />
                    </DataGrid.Columns>
                </fw:DataGridEx>
GetValue(NameProperty)方法返回正确的值。我显然不想这样做,因为这会违反MVVM模式。我这样做只是为了调试


有人知道为什么它不能识别XAML中定义的名称吗?

我找到了解决问题的方法。请阅读最初的问题并检查我提到我试图实现的内容的链接

DataGridTextColumn没有name属性

您必须通过实现自己的DataGridTextColumn来添加一个

public class DataGridTextColumnEx : DataGridTextColumn
{
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }
}
DataGridEx实现中的更改

foreach (DataGridTextColumnEx column in dg.Columns)
        {
            if (hiddenColumns.Contains((string)column.Name))
                column.Visibility = Visibility.Collapsed;
            else
                column.Visibility = Visibility.Visible;
        }
和XAML列条目更改

<fw:DataGridTextColumnEx Name="logColumnTime"
                         Header="Time"
                         Binding="{Binding Time}" />

<fw:DataGridTextColumnEx Name="logColumnTime"
                         Header="Time"
                         Binding="{Binding Time}" />