2013-05-28 60 views
0

不是任何類型的特定代碼問題,我只是想更好地瞭解數據綁定在DataTemplate中的工作方式。這只是一個示例代碼塊;我已經定義了一個Client類有三個屬性(這些屬性的目的是無關的問題)WPF,Datatemplates和Data binding

public class Client 
{ 
    public bool Powered { get; set; } 
    public bool clientAlive { get; set; } 
    public bool updaterAlive { get; set; } 
} 

我填充ListView使用客戶端的列表:

List<Client> clientList = new List<Client>(); 
//populate the list from JSON url, code omitted 
listView1.ItemsSource = clientList; 

下面是塊XAML代碼保存爲模板在ListView顯示項目:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <WrapPanel> 
      <TextBlock Text="Powered: " FontWeight="Bold" /> 
      <TextBlock Text="{Binding Powered}" /> 
      <TextBlock Text=", " /> 
      <TextBlock Text="clientAlive: " FontWeight="Bold" /> 
      <TextBlock Text="{Binding clientAlive}" /> 
      <TextBlock Text=", " /> 
      <TextBlock Text="updaterAlive: " FontWeight="Bold" /> 
      <TextBlock Text="{Binding updaterAlive}" /> 
     </WrapPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 

的代碼運行正常,一切都將按預期顯示,我只是想知道是否有人可以解釋WPF中的數據綁定是如何工作的。就我而言,XAML中沒有任何內容引用Client類,我只是對XAML知道如何顯示綁定指定的屬性感到困惑。 Text = "{Binding = Powered}"是否僅查找與填充列表的項目類型內的綁定相匹配的屬性?

+0

此網站是關於問題和解答。你最好把它作爲一個可回答的問題來制定。請參閱http://stackoverflow.com/faq#dontask – IvanH

回答

1

Text =「{Binding = Powered}」只是查找與填充列表的項目類型內的綁定相匹配的屬性?

基本上,是的。如果您填充列表的項目沒有該屬性,則會看到綁定錯誤(在調試時查看控制檯)。

您也可以爲您的DataTemplate提供一種類型,這將允許您根據集合中對象的具體類型使用多個模板。

0

當集合被綁定到listview時,將生成每個列表項容器,並將Content設置爲Client對象。所以數據模板中的可視化呈現將Client對象作爲其數據上下文。

「{Binding Powered}」這一行將查找datacontext並找到名爲「Powered」的屬性並解析其值。只需刪除「Powered」一詞並將其保留爲「{Binding}」,WPF將顯示您的datacontext對象的完全限定名稱。