collectionviewのソースをobservablecollecionにバインドすることができます。私の質問は:mvvmを使用している場合、なぜコードビハインドのように見えるのですか?
のViewModelコンストラクタ:
public PrimarySearchViewModel()
{
this.SearchResultsCVS = new CollectionViewSource();
if (IsInDesignMode)
{
DesignMode_CreateSearchResults();
// Code runs in Blend --> create design time data.
}
else
{
//Messenger.Default.Register<IEnumerable<ReadmitPatientList>>(this, MessageTypes.EXECUTESEARCHREQUEST, RefreshSearchResults);
//Messenger.Default.Register<MessageTypes.EXECUTESEARCHREQUEST>>(this,ICollection<ReadmitPatientList>,RefreshSearchResults);
Messenger.Default.Register<Messages.DisplayReadmitPatientListMessage>(this, onReciveDisplayReadmitPatientListMessage);
Messenger.Default.Register<WavelengthIS.Core.Messaging.SaveNotification<QuestionairreViewModel>>(this, sn => ClearSearchResults());
// Code runs "for real": Connect to service, etc...
}
}
は、私は通常私の設計時のデータを作成するために設計時のサービスを使用しますが、この場合には、私はちょうどでした間に合わせのコピー&ペースト:私が使用
private void DesignMode_CreateSearchResults()
{
this.SearchResults = new ObservableCollection<ReadmitPatientListViewModel>();
this.SearchResults.Add(new ReadmitPatientListViewModel(new ReadmitPatientList()
{
PatientID = 0000000,
PatientName = "Test Patient",
PatientDOB = Convert.ToDateTime("01/01/2010"),
OriginalAdmitDate = Convert.ToDateTime("01/01/2010 00:00:00"),
OriginalReason = "Becauselkahsdfkahsfkahsf",
OriginalVisitNumber = "0000000",
ReAdmitDate = Convert.ToDateTime("01/01/2010 00:00:00"),
ReAdmitReason = ";aasfkahsfashfa;lsfas",
ReAdmitVisitNumber = "9999999"
}
));
this.SearchResults.Add(new ReadmitPatientListViewModel(new ReadmitPatientList()
{
PatientID = 0000000,
PatientName = "Test Patient",
PatientDOB = Convert.ToDateTime("01/01/2010"),
OriginalAdmitDate = Convert.ToDateTime("01/01/2010 00:00:00"),
OriginalReason = "Becauselkahsdfkahsfkahsf",
OriginalVisitNumber = "0000000",
ReAdmitDate = Convert.ToDateTime("01/01/2010 00:00:00"),
ReAdmitReason = ";aasfkahsfashfa;lsfas",
ReAdmitVisitNumber = "9999999"
}
));
this.SearchResults.Add(new ReadmitPatientListViewModel(new ReadmitPatientList()
{
PatientID = 0000000,
PatientName = "Test Patient",
PatientDOB = Convert.ToDateTime("01/01/2010"),
OriginalAdmitDate = Convert.ToDateTime("01/01/2010 00:00:00"),
OriginalReason = "Becauselkahsdfkahsfkahsf",
OriginalVisitNumber = "0000000",
ReAdmitDate = Convert.ToDateTime("01/01/2010 00:00:00"),
ReAdmitReason = ";aasfkahsfashfa;lsfas",
ReAdmitVisitNumber = "9999999"
}
));
SearchResultsCVS_Refresh();
}
private void SearchResultsCVS_Refresh()
{
SearchResultsCVS.Source = this.SearchResults;
SearchResultsCVS.SortDescriptions.Clear();
SearchResultsCVS.SortDescriptions.Add(new System.ComponentModel.SortDescription("PatientLastName", System.ComponentModel.ListSortDirection.Ascending));
SearchResultsCVS.View.Refresh();
}
ViewModelsのObservableCollectionsです。 OCの通知イベントは、実際のリストアイテムのVMを使用してコレクションに追加または削除されたアイテムに対してのみ発生し、必要に応じてアイテムプロパティの変更通知を受け取ります。
また、ViewModelLocatorの設定が正しく、正しいことを確認する必要があります。私はMVVMLightを使用している人のいくつかの投稿を見つけましたが、そこから最も強力な機能のいくつかを使用していません。それを使用するように設計されたものとして使用すると、それは動作するように動作します...私はそれを証明することができます。
<!--Global View Model Locator-->
<local:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
私は、IsDataSource属性が、BlendにDataTabに置くように指示すると信じています。しかし、私はDatamanulationのためにそれほど混じり合っていないので、私はそれについて心配していません。
これがうまくいけば幸せになれば、私はなぜそれが「罪」と考えられるのか分かりません;) – AbdouMoumen