ProjektübersichtWPF Datacontext nicht aktualisiert das Datagrid mit MVVM Modell
Ich habe eine Ansicht, die zu einem Viewmodel, das 2 ObserverableCollection bindet. Der Viewmodel-Konstruktor füllt die erste ObservableCollection und der View-Datenkontext wird gesammelt, um über eine öffentliche Eigenschaft namens Sites an ihn gebunden zu werden.
Später wird die 2ed ObservableCollection in der LoadOrders-Methode aufgefüllt und die öffentliche Eigenschaft LoadFraudResults wird aktualisiert, um sie mit datacontext zu binden.
Ich benutze WCF, um die Daten aus der Datenbank zu ziehen und es wird sehr schön gezogen.
Ansichtsmodell SOURCE
class ManageFraudOrderViewModel:ViewModelBase
{
#region Fields
private readonly ICollectionView collectionViewSites;
private readonly ICollectionView collectionView;
private ObservableCollection<GeneralAdminService.Website> _sites;
private ObservableCollection<FraudService.OrderQueue> _LoadFraudResults;
#endregion
#region Properties
public ObservableCollection<GeneralAdminService.Website> Sites
{
get { return this._sites; }
}
public ObservableCollection<FraudService.OrderQueue> LoadFraudResults
{
get { return this._LoadFraudResults;}
}
#endregion
public ManageFraudOrderViewModel()
{
//Get values from wfc service model
GeneralAdminService.GeneralAdminServiceClient generalAdminServiceClient = new GeneralAdminServiceClient();
GeneralAdminService.Website[] websites = generalAdminServiceClient.GetWebsites();
//Get values from wfc service model
if (websites.Length > 0)
{
_sites = new ObservableCollection<Wqn.Administration.UI.GeneralAdminService.Website>();
foreach (GeneralAdminService.Website website in websites)
{
_sites.Add((Wqn.Administration.UI.GeneralAdminService.Website)website);
}
this.collectionViewSites= CollectionViewSource.GetDefaultView(this._sites);
}
generalAdminServiceClient.Close();
}
public void LoadOrders(Wqn.Administration.UI.FraudService.Website website)
{
//Get values from wfc service model
FraudServiceClient fraudServiceClient = new FraudServiceClient();
FraudService.OrderQueue[] OrderQueue = fraudServiceClient.GetFraudOrders(website);
//Get values from wfc service model
if (OrderQueue.Length > 0)
{
_LoadFraudResults = new ObservableCollection<Wqn.Administration.UI.FraudService.OrderQueue>();
foreach (FraudService.OrderQueue orderQueue in OrderQueue)
{
_LoadFraudResults.Add(orderQueue);
}
}
this.collectionViewSites= CollectionViewSource.GetDefaultView(this._LoadFraudResults);
fraudServiceClient.Close();
}
}
VIEW SOURCE
public partial class OrderQueueControl: Usercontrol {
private ManageFraudOrderViewModel manageFraudOrderViewModel ;
private OrderQueue orderQueue;
private ButtonAction ButtonAction;
private DispatcherTimer dispatcherTimer;
public OrderQueueControl()
{
LoadOrderQueueForm();
}
#region LoadOrderQueueForm
private void LoadOrderQueueForm()
{
//for binding the first observablecollection
manageFraudOrderViewModel = new ManageFraudOrderViewModel();
this.DataContext = manageFraudOrderViewModel;
}
#endregion
private void cmbWebsite_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
BindItemsSource();
}
#region BindItemsSource
private void BindItemsSource()
{
using (OverrideCursor cursor = new OverrideCursor(Cursors.Wait))
{
if (!string.IsNullOrEmpty(Convert.ToString(cmbWebsite.SelectedItem)))
{
Wqn.Administration.UI.FraudService.Website website = (Wqn.Administration.UI.FraudService.Website)Enum.Parse(typeof(Wqn.Administration.UI.FraudService.Website),cmbWebsite.SelectedItem.ToString());
//for binding the second observablecollection*******
manageFraudOrderViewModel.LoadOrders(website);
this.DataContext = manageFraudOrderViewModel;
//for binding the second observablecollection*******
}
}
}
#endregion
}
XAML
ComboBox x: Name = "cmbWebsite" Itemssource = "{Seiten Binding}" RAND = "5" Breite = "100" height = "25" Selection = "cmbWebsite_SelectionChanged"
Datagrid Itemssource = {Binding Path = LoadFraudResults}
Problemkreis:
Als ich die LoadOrderQueueForm rufen Sie die erste ObservableCollection und später BindItemsSource zu binden 2ed beobachtbaren Sammlung zu binden, funktioniert alles einwandfrei und kein probl em zum ersten Mal verbindlich.
Wenn ich jedoch BindItemsSource erneut aufrufen, um die obseravablecollection basierend auf dem geänderten ausgewählten Kombinationswert über cmbWebsite_SelectionChanged erneut zu füllen, wird die observalgeblecollection mit einem neuen Wert gefüllt und die LoadFraudResults-Eigenschaft in viewmodule wird mit neuen Werten gefüllt. Wenn ich jedoch den Datenkontext aufruft, um das Datagrid erneut zu binden, gibt das Datagrid die geänderten Werte nicht wieder.
Mit anderen Worten, das Datagrid wird nicht geändert, wenn der Datenkontext in der BindItemsSource-Methode der Ansicht die 2te Zeit aufgerufen wird.
manageFraudOrderViewModel.LoadOrders (Website);
this.DataContext = manageFraudOrderViewModel;
Werte von manageFraudOrderViewModel sind korrekt, aber das Datagrid wird nicht mit geänderten Werten veröffentlicht.
Bitte helfen Sie mir, wie ich mit diesem Ding seit letzten 2 Tagen fest bin und die Frist nähert sich in der Nähe.
Vielen Dank im Voraus
Das ist so nervig !!!!!! –
Sie wissen, das ist nicht die Lösung. –