XamDataGrid column visibilty is not working using MVVM

Anshuman picture Anshuman · Jun 19, 2012 · Viewed 7.3k times · Source

I'm trying to implement XamDataGrid column visibilty in a MVVM architecture and it does not seems to be working.

I'm doing the following:

Adding Visiblility property for an unbound field -

<igDP:UnboundField Name="gridCustomerId" 
                   Label="ID" 
                   Binding="{Binding customerid, 
                                     Mode=TwoWay, 
                                     UpdateSourceTrigger=PropertyChanged}" 
                   Visibility="{Binding ShowCustomerIDColumn, 
                                        Mode=TwoWay, 
                                        UpdateSourceTrigger=PropertyChanged}">

In my View Model, adding a proerty of Visibility type:

//ToShow CustomerID Column
private Visibility showCustomerIDColumn; 
public Visibility ShowCustomerIDColumn 
{
    get
    {
        return showCustomerIDColumn; 
    }

    set
    {
        showCustomerIDColumn=value; 
        InvokePropertyChanged("ShowCustomerIDColumn"); 
    }    
}

Then in the command handler using the following code:

if(ShowCustomerIDColumn == Visibility.Hidden) 
    ShowCustomerIDColumn = Visibility.Visible; 
else
    ShowCustomerIDColumn = Visibility.Hidden; 

InvokePropertyChanged("ShowCustomerIDColumn");

Anybody with a solution?

Cheers, Anshuman

Answer

Kylo Ren picture Kylo Ren · Jan 22, 2016

The main reason why visibility is not working here cause Visibility is not a dependency property in Fields Class(UnboundField class is derived from Field class) unlike other properties.

See visibility property

See visibility property

See Label/RowSpan Property that support binding

See Label Property that support binding

You need to set the visibility in c# code(either in some behavior or code behind event):

fieldlayout.Fields[node.Name].Visibility = node.Visibility ? Visibility.Visible : Visibility.Collapsed;