1

I am trying to implement this https://stackoverflow.com/a/3754004/1805329

My problem is that

(string)column.GetValue(NameProperty)

returns "" although i did set Names for every column in my Grid.

<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>

When I set the name for a column with

columns[0].SetValue(NameProperty, "Time");

the GetValue(NameProperty) method returns the correct value. I obviously don't want to do this, because it would be against the MVVM pattern. I did it only for debugging purposes.

Does anyone know why it doesn't recognize the name defined in XAML?

Community
  • 1
  • 1
nimp0u
  • 123
  • 2
  • 6

1 Answers1

0

I found the solution for my problem. Please also read the initial question and check the link where i mentioned what I was trying to implement.

The DataGridTextColumn has no name property. http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtextcolumn_properties(v=vs.110).aspx

You have to add one by implementing your own DataGridTextColumn.

public class DataGridTextColumnEx : DataGridTextColumn
{
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }
}

Changes in the DataGridEx implementation

foreach (DataGridTextColumnEx column in dg.Columns)
        {
            if (hiddenColumns.Contains((string)column.Name))
                column.Visibility = Visibility.Collapsed;
            else
                column.Visibility = Visibility.Visible;
        }

And XAML column entry changes

<fw:DataGridTextColumnEx Name="logColumnTime"
                         Header="Time"
                         Binding="{Binding Time}" />
nimp0u
  • 123
  • 2
  • 6