2009-04-24 79 views
8

我打算一個WPF應用程序,這將如何在WPF應用程序中構建動態數據輸入表單?

  • 能夠創建動態數據輸入表單(意形式獲取到顯示的字段,它們的順序等。從數據庫中的數據,而不是從在XAML)
  • 使用MVVM模式如果可能的話

這裏是我打算去一下:在客戶資料錄入查看我將設置數據上下文:

<UserControl.DataContext> 
    <vm:DynamicFormViewModel/> 
</UserControl.DataContext> 

,然後包括一個元素在我的XAML爲形式的佔位符:

<UserControl.Content> 
    <view:DynamicFormView x:Name="CustomerEntry"/> 
</UserControl.Content> 

然後在我的模型視圖我想不會有靜態屬性,但我想建立XAML作爲一個內置HTML控件回在ASP.NET,以這種方式:

View view = new View(); 
view.Children.Add(...) 

,並以這種方式建立基於數據的收集網格(名字,姓氏)和元數據(字段標籤,字段名,現場幫助文件,場顯示順序等等)ViewModel從模型中獲得。

  • 有沒有人構建了一個WPF應用程序,可以以這種方式創建動態表單?
  • 你使用MVVM模式嗎?
  • 是否有可能以這種方式使用MVVM模式,或MVVM模式是否預先假設視圖模型中的靜態字段直接綁定到View中的靜態元素?

回答

7

您必須爲各種字段數據類型編寫數據模板,以便WPF根據類型選擇如何顯示數據。這種格式的東西:

注:這不是WPF只是僞代碼

<DataTemplate DataType="{x:Type DateTime}"> 
    <DatePicker Value="{Binding}"/> 
</DataTemplate> 
<DataTemplate DataType="{x:Type String}"> 
    <TextBox Text="{Binding}"/> 
</DataTemplate> 

它不必是一個基本類型。它可以是Email,DateApproved或甚至Url類的類型。例如

class Customer 
{ 
    public Email Email{get;set;} 
    public DateTime DateApproved{get;set;} 
    public URI Url{get;set;} 
} 

public class Email 
{ 
    public string Type{get;set;} 
    public string Value{get;set;} 
} 

...等...

更新

檢查出這個MSDN WPF動態UI例如:Dynamic Data Entry with WPF and LINQ

+0

正確,但我想包括自定義類型,如電子郵件,URL,持續時間,客戶,所以每個人都必須有自己的驗證。我在想象一個名爲「CustomType」的基礎,所有這些類型都繼承它們,並且每個基礎都建立了自己的方法,例如, IsValid()和displayAsXaml()等。 – 2009-04-24 14:30:12

1

您需要設定每個字段類型如一個DataTemplate日期,字符串,布爾。這將決定每個字段的顯示方式。

然後,您可以使用數據庫查詢的列來生成對象列表並將它們放置到ItemsControl中。

ObservableCollection<ColumnDef> columns = new ObservableCollection<ColumnDef>(); 

// Add columns from DB 
columns.Add(new StringColumnDef{Object=..., Field=..., Label=..., Value=...}); 
columns.Add(new DateColumnDef{Object=..., Field=..., Label=..., Value=...}); 

items.ItemsSource = columns; // items is an ItemsControl 

項目控件中的每個項目都將基於該類型的DataTemplate顯示。

在ColumnDef中,您可以使用反射來更新數據對象,並使用UI控件的更改。然後,您可以在用戶保存時將更改應用到數據庫。

相關問題