Silverlight MVVM添加/编辑

Silverlight MVVM添加/编辑,silverlight,mvvm,add,edit,Silverlight,Mvvm,Add,Edit,我必须构建一个表单(XAML),该表单将用于在DB中创建记录,稍后将通过传递ID进行编辑。表单中会有组合框,这些组合框将从DB填充,也会有文本框。我不想复制添加和编辑的XAML,并尽可能多地恢复代码。如何在MVVM中实现这一点?我想使用MVVM的最佳实践。如果有人能提供一个静止点,那就太好了。这是一个非常普遍的情况 您可以创建一个XAML控件/页,该控件/页接受特定类型的对象/实例,并允许编辑该对象的属性 在编辑的情况下,您将传入从数据库预填充的对象 在Create中,传入该类型的新实例 调用方

我必须构建一个表单(XAML),该表单将用于在DB中创建记录,稍后将通过传递ID进行编辑。表单中会有组合框,这些组合框将从DB填充,也会有文本框。我不想复制添加和编辑的XAML,并尽可能多地恢复代码。如何在MVVM中实现这一点?我想使用MVVM的最佳实践。如果有人能提供一个静止点,那就太好了。

这是一个非常普遍的情况

您可以创建一个XAML控件/页,该控件/页接受特定类型的对象/实例,并允许编辑该对象的属性

在编辑的情况下,您将传入从数据库预填充的对象

在Create中,传入该类型的新实例

调用方/主机将知道传递给编辑控件的对象类型


因此,当编辑控件返回该对象时,调用方/主机可以负责向数据库添加/更新数据。

您可以使用Silverlight Toolkit中的数据表单,它提供了不同的编辑模式,例如添加、编辑

下面是该方法的概要。您将需要两个视图模型。一个用于数据,另一个用于表单

// FormViewModel.cs
public class FormViewModel
{
   public Customer DataItem {get; set;}

   // --------- perform action ---------------
   private ICommand _PerformActionCommand = new DelegateCommand(PerformAction);
   public ICommand PerformActionCommand {
      get { return _PerformActionCommand; }
   }

   public void PerformAction()       
   {
      if (Customer.IsNew)
          InsertCustomer(Customer);
      else
          SaveCustomer(Customer);     
   }

   // ------ Button Label --------------
   public string ButtonLabel {
      get {
         return (Customer.IsNew)? "Add": "Update";
      }
   }
}
以下是表格:

<UserControl.Resources>
    <local:FormViewModel x:Key="formVM" />
</UserControl.Resources>
<Button 
  Content="{Binding Path=ButtonLabel
                    Source={StaticResource formVM}}"
  Command="{Binding Path=PerformActionCommand, 
                    Source={StaticResource formVM}}" />


这是一个非常普遍的问题,表明您缺乏努力。试着从总体上研究MVVM,然后再提出关于具体问题的问题。你有这样的例子吗?我需要1视图和2视图模型还是反之?