【问题标题】:Silverlight MVVM Add/EditSilverlight MVVM 添加/编辑
【发布时间】:2023-04-01 08:45:02
【问题描述】:

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

【问题讨论】:

  • 这是一个非常普遍的问题,表明您缺乏努力。尝试对 MVVM 进行总体研究,而不是针对具体问题提出问题。

标签: silverlight mvvm add edit


【解决方案1】:

这是一个非常普遍的场景。

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

Edit 的情况下,您传入一个从数据库中预填充的对象。

如果是 Create,则传入该类型的新实例。

调用者/宿主会知道传递给编辑控件的对象类型。

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

【讨论】:

  • 你有这方面的例子吗?我需要 1 个视图和 2 个视图模型,反之亦然?
【解决方案2】:

您可以使用 Silverlight Toolkit 中的 DataForm,它提供了不同的编辑模式 - 例如添加,编辑。

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

// 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}}" />

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多