プロジェクトの概要WPFのDataContextは、私は2 ObserverableCollectionを含むのviewmodelに結合するビューを持っているMVVMモデルに
を使用してデータグリッドをリフレッシュしません。 viewmodelコンストラクタは最初のObserverableCollectionにデータを取り込み、datacontextはSitesというパブリックプロパティを通じてバインドされたビューを生成します。
2he ObserverableCollectionがLoadOrdersメソッドに設定され、パブリックプロパティLoadFraudResultsがdatacontextとバインドされるように更新されます。
私はWCFを使用してデータベースからデータを取得しています。そのデータは非常にうまく抽出されています。
ビューモデル源
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源
パブリックパーシャルクラスOrderQueueControl:ユーザーコントロール {
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
コンボボックスX:NAME = "cmbWebsite" のItemsSource = "{結合部位}" マージン= "5" 幅= "100" 高さ= "25" SelectionChanged = "cmbWebsite_SelectionChanged"
のDataGridのItemsSource = {バインディングパス= LoadFraudResults}
問題領域:
私は2ED監視可能なコレクションをバインドする最初のObservableCollection以降BindItemsSourceをバインドするLoadOrderQueueFormを呼び出して、すべてが正常に動作していないprobl最初のバインディングのためのem。
しかし、cmbWebsite_SelectionChangedによって変更された選択されたコンボ値に基づいてobseravablecollectionを再度埋め込むためにBindItemsSourceを呼び出すと、observalblecollectionに新しい値が設定され、viewmoduleのLoadFraudResultsプロパティに新しい値が設定されます。 datagridを再バインドするためにdatacontextを呼び出すと、データグリッドは変更された値を反映しません。
つまり、ビューのBindItemsSourceメソッドでdatacontextが2回呼び出されたときに、データグリッドは変更されません。
manageFraudOrderViewModel.LoadOrders(website);
this.DataContext = manageFraudOrderViewModel;
manageFraudOrderViewModelの値は正しいですが、データグリッドは変更された値で再選択されません。
私は過去2日間このことに固執しており、期限が近づいていますのでお手伝いください。事前
これは大変迷惑です!!!!!! –
これは解決策ではありません。 –