私は最近、まだ機能していないように見えるMVVMのコツをつかもうと試み始めました。
モデル、ビュー、ビューモデルがあります。インターフェイスを使用する baseviewmodel が 1 つありINotifyPropertyChanged
ます。
ViewModels
すべてのビューでデータを使用できるように、自分のコレクションを作成したいと考えています。しかし、私はこれを進めることができないようです。
とにかく、たくさんの異なるものを読んだ後、何がどうあるべきかさえわかりません。
誰かが私に答えてくれることを願っている私の最大の問題は、私のコレクションをどこに捨てるViewModels
かということです。1 つを変更ViewModel
してView
、別の場所で再度表示する必要があります。
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public BaseViewModel()
{
}
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
これは、ViewModel
あるビューで入力され、別のビューで表示する必要があるものです。ObservableCollection<T>
しかし、クラスでこれを行う方法がわかりません。
public class WorkViewModel : BaseViewModel
{
private string reference;
private string address;
private string scope;
private string cost;
private double amount;
private double gst;
private double total;
public string Reference
{
get { return reference; }
set
{
if (reference != value)
{ reference = value; RaisePropertyChanged("Reference"); }
}
}
public string Address
{
get { return address; }
set
{
if (address != value)
{ address = value; RaisePropertyChanged("Address"); }
}
}
public string Scope
{
get { return scope; }
set
{
if (scope != value)
{ scope = value; RaisePropertyChanged("Scope"); }
}
}
public string Cost
{
get { return cost; }
set
{
if (cost != value)
{ cost = value; RaisePropertyChanged("Cost"); }
}
}
public double Amount
{
get { return amount; }
set
{
if (amount != value)
{
amount = value;
GST = Math.Round(amount * 0.10,2);
RaisePropertyChanged("Amount");
}
}
}
public double GST
{
get { return gst; }
set
{
if (gst != value)
{
gst = value;
Total = Math.Round(Amount + GST,2);
RaisePropertyChanged("GST");
}
}
}
public double Total
{
get { return total; }
set
{
if (total != value)
{
total = value;
RaisePropertyChanged("Total");
}
}
}
}
私はこれを試しました:
"Create a BaseViewModel and a Collection ObservableCollection<BaseViewModel> _viewModels;
Create a Property ObservableCollection<BaseViewModel> ViewModels around _viewModels
Define your View Models like this and add to Collection
MainViewModel : BaseViewModel
Tab1ViewModel : BaseViewModel
Tab2ViewModel : BaseViewModel
これで次のように使用できます。
Tab1ViewModel vm = (ViewModels.Where(vm => vm is Tab1ViewModel).Count() == 0) ? new Tab1ViewModel(): (ViewModels.Where(vm => vm is Tab1ViewModel).FirstOrDefault() as Tab1ViewModel;"
シングルトンを作る必要があるようですか?