CM and non MVVM third party controls

Topics: UI Architecture
Oct 29, 2011 at 4:35 PM
Edited Oct 29, 2011 at 7:20 PM

I am sorry if this has been asked before.

 

I have been tasked with converting a windows forms system to WPF.  Many of the screen use the devexpress pivot grid which is populated like this:

 

private void FillGrid_Click(object sender, RoutedEventArgs e)
{
IEnumerable<GridRow> NewData;

NewData=GetNewData()
PivotGrid1.DataSource=NewData();
PivotGrid1.ReloadData(); // this function has to be called to refresh the ui grid
}

I would like to convert this to:

MyView:

 <dxpg:PivotGridControl HorizontalAlignment="Left" Margin="24,20,0,0" x:Name="pivotGridControl1" VerticalAlignment="Top" />

MyViewModel:

 

IEnumerable<GridRow> NewData;

Void GetNewData()
{
//populate NewData
//reload data
}
 This has two problems. First, I am not sure how to bind to the data source but that can be over come with a general wpf binding:
 <dxg:GridControl ItemsSource="{Binding Source}" x:Name="grid" 
                         ColumnsSource="{Binding Columns}". . . .
Viewmodel:
        public IList<Employee> Source { get; private set; } 
      public ObservableCollection<Column> Columns { get; private set; }


The bigger problem is how do I can call ReloadData from my ViewModel.

I could set up my viewmodel to be intialize with my view but I don't like my view being that accessible to viewmodel. 
(fear of descending back into a mix of view and model)
I could use the codebehind to call the viewmodel then call Reload Data:
private void FillGrid_Click(object sender, RoutedEventArgs e)
{

vm=getViewModel;
vm.GetData()
PivotGrid1.DataSource=vm.NewData;
PivotGrid1.ReloadData()
}
This is not pretty but does not allow the view info to pollute view model.
I could set up an event to tell the view to update itself. 

Has anybody come across this problem.

thanks!

Keith