MVVM, .
public interface IView<C>
where C : class
{
}
public interface IView<C, VM> : IView<C>
where C : class
where VM : IViewModel
{
IDisposable Bind(VM viewModel);
}
public interface IViewModel : INotifyPropertyChanged
{
}
public interface IViewModel<M> : IViewModel
where M : class
{
IView<C> Bind<C>(M model) where C : class;
IView<C> Bind<C>(string key, M model) where C : class;
}
public interface IViewModel<VM, M> : IViewModel<M>
where VM : IViewModel<VM, M>
where M : class
{
}
Person .
public interface IPerson : INotifyPropertyChanged
{
string Name { get; set; }
DateTime? Dob { get; set; }
}
public interface IPersonViewModel : IViewModel<IPersonViewModel, IPerson>
{
string Name { get; set; }
DateTime? Dob { get; set; }
int? Age { get; }
string Title { get; }
}
, , :
[Factory(typeof(IView<Control, IPersonViewModel>))]
public partial class PersonView : UserControl, IView<Control, IPersonViewModel>
{
public PersonView()
{
InitializeComponent();
}
public IDisposable Bind(IPersonViewModel viewModel)
{
this.personViewModelBindingSource.DataSource = viewModel;
return Disposable.Create(() => this.personViewModelBindingSource.Dispose());
}
}
, , :
var personM = context.Resolve<IPerson>();
var personVM = context.Resolve<IPersonViewModel>();
var personV = personVM.Bind<Control>(personM);
var personC = personV.AsControl();
personC.Dock = DockStyle.Fill;
this.panel1.Controls.Add(personC);
, . Bind . , Windows Forms, WPF Silverlight.
, , .