2015-01-15 49 views
0

我有構成這樣的組合框:鑄造他人財產的MVVM

public class PersonDataQueryField 
    { 
     public string FriendlyName { get; set; } 
     public IList<string> XPaths { get; set; } 
     public Type DataType { get; set; } 
    } 

這個類的列表存在於我的視圖模型,並綁定到一個組合框,與DisplayMemeberPath=FriendlyName。我在我的視圖中有幾個DataTemplates,這將根據Combobox中選定的DataType來觸發,以填充ContentControl。在此組合框的右側存在TextBox,用戶可以在其中輸入SearchQuery。 Text屬性類型爲object,並且當用戶按下「搜索」時將被輸出到SelectedPersonDataQueryField.DataType

var searchQuery = (SelectedSearchQueryParameter.DataType) SearchQuery; 

這因爲SelectedSearchQueryParameter是不允許的是Property而不是Type,但DataTypeType。我怎樣才能做到這一點?

+2

事後你會怎麼做('searchQuery')?轉換的重點通常是允許您在隨後的代碼中使用該類型的某些成員 - 如果您不知道在編譯時它是什麼類型,那麼您將嘗試使用哪些成員? –

+0

如果使用可以評估TextBox內容的DataTemplateSelector並切換相關模板,這會不會更好?或者,正如@JonSkeet所問,你是否需要在轉換的DataType上使用特定的成員? – olitee

+0

'searchQuery'變量應該被髮送到一個'facade',它可以接受任何類型,進一步到'repository',最後到一個WCF服務。我可能需要重新考慮設計.. –

回答

1

我同意喬恩的觀點。雖然,這是如何:

dynamic searchQuery = Convert.ChangeType(SearchQuery, 
          SelectedSearchQueryParameter.DataType); 

但爲什麼,以及下一步:p?