Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XamDataGrid column visibilty is not working using MVVM

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

like image 837
Anshuman Avatar asked Oct 23 '22 19:10

Anshuman


1 Answers

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;
like image 157
Kylo Ren Avatar answered Dec 10 '22 01:12

Kylo Ren