2014-03-19 47 views
0

我正在使用數據庫,實體框架4的WPF應用程序。在WPF中綁定動態屬性:綁定到DynamicObject或Dictionary,或者?

其中一個函數就像TFS workitem提交。除核心字段外,用戶還可以添加一些額外字段並保存。主要問題是將額外的字段綁定到UI。只需要一個具有最少功能的UI就足夠了:一些核心字段,以及可以顯示額外字段的stackpanel或itemscontrol或類似的東西。

我目前有兩個主要思路:

  1. 的DynamicObject,屬性可以在運行時創建的,但我 還不知道如何將它們綁定到UI(我需要你的解決方案 請)?
  2. 綁定字典ItemsControl的(但是,它的約束力?特別是當我想要一些MVVM風格,或當我需要爲不同的物業類型不同的DataTemplates良好的作風?)

因爲我很新手編程,我甚至不知道上面哪個最終會工作。在最終嘗試之前,我只是想象並提出問題。你能提出一種最簡單的方法嗎?

+1

這是一個主觀的問題,這取決於用戶的意見...因此,這是堆棧溢出的主題,它幾乎肯定會被刪除,除非你編輯它使其少*基於觀點*。 – Sheridan

+0

@Sheridan謝謝,我編輯過,你認爲它現在嗎? –

+1

真的,這個網站通常是針對涉及用戶目前面臨的特定編程問題的問題......它真的不適合*我應該走哪條路*和哪個更好*類型問題。但是,由於您已經盡力使您的問題變得不那麼重要,所以我想認爲Stack Overflow社區會讓您休息一下,而不是關閉您的問題。 – Sheridan

回答

1

在WPF中,我們使用數據元素而不是UI元素。通過這個,我的意思是你的用戶將添加數據與這些新屬性相關。你的工作是顯示這些數據,甚至可能用於編輯。在這方面,與其他觀點沒有什麼不同。通常,我們通過聲明DataTemplate s來顯示數據。

在你的情況,假設你有一個用戶已添加string屬性,它們可以存儲在類似這樣的類:

public class CustomData // Implement the INotifyPropertyChanged interface here 
{ 
    public string Label { get; set; } 
    public string Value { get; set; } 
} 

然後將其顯示爲可編輯的數據,你只需要定義正確的DataTemplate

<DataTemplate x:Key="Template" DataType="{x:Type DataTypes:CustomData}"> 
    <Grid Grid.IsSharedSizeScope="True"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="Label" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0" Text="{Binding Label}" /> 
     <TextBox Grid.Column="1" Text="{Binding Value}" /> 
    </Grid> 
</DataTemplate> 

DataTemplate將在綁定​​控件的LabelValue屬性的數據顯示數據項GridGrid.IsSharedSizeScopeSharedSizeGroup屬性將確保所有控件排列在一條直線上。

最後,數據這種類型的項目集合綁定到ItemsControl.ItemsSource屬性來顯示他們:

<ListBox ItemsSource="{Binding YourCustomDataCollection}" /> 

你甚至可以StyleListBox,這樣它看起來並不像一個ListBox,讓你的自定義數據控件看起來像一列正常控件。

+0

謝謝你寫這麼多的話,我會盡快嘗試! –