2009-12-20 54 views
1

子元素給出一個人口ListView,我通過每個迭代如何綁定模板並挖出了包含ComboBox(或包含在DataTemplate任何其他控件)?找到一個WPF的ListView的ItemTemplate

<ListView x:Name="lstCommands"> 
<ListView.ItemTemplate> 
    <DataTemplate> 
     <Grid x:Name="gridInputs"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="100"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Label Content="{Binding Path=Key}"/> 
      <ComboBox x:Name="cbInputCmd" Grid.Column="1" ItemsSource="{Binding Source={StaticResource inputData}}" Tag="{Binding Path=Key}"/> 
     </Grid> 
    </DataTemplate> 
</ListView.ItemTemplate> 

回答

3

首先,避免這樣做,除非你真的需要。如果您絕對必須,則可以使用DataTemplate.FindName,其中模板父項爲由ListView生成的ListViewItem。要獲得ListViewItem,請使用ListViewItemContainerGenerator

更新:我建議儘可能避免使用這種方法的原因是因爲它會創建更緊密耦合的脆弱代碼。 OP沒有提到他爲什麼想要做他想問的事情,但我懷疑他可以通過更加習慣的方式實現他的目標,比如綁定。

+1

嗨! iam在wpf中很新穎。我想知道不這樣做的原因是什麼。因爲我有類似的問題。我有一個列表視圖裏面的項目和組合框。並且在列表視圖之外的一個按鈕將所選值保存在comboxes中。 – Tan

+0

@Kent Boogaart良好的信息,但不是非常有用的只是說「不要這樣做」。原因不在於你鏈接到的MSDN文檔,所以每個人都只是想知道你知道什麼,但我們不知道。 – dansan

+0

此外,根據問題中鏈接到的文檔,您實際上使用ContentPresenter作爲FindName()中的templatedParent參數。使用ListeViewItem會導致異常。 – dansan

0

你可以嘗試使用LogicalTreeHelperVisualTreeHelper它可以讓你查詢其子女的對象,但如果你是結合你的組合框項目列表視圖中顯示的是你會不會擔心「讓」他們所有。

然後你可以看看你的物品。當你發現自己在視覺或邏輯樹中尋找存在於你的用戶界面中的元素時,你就可以得到他們的價值,問自己'我在這裏錯過了什麼''爲什麼我的業務(或查看模型)在用戶與用戶交互時正在用相關數據更新?

對於上面的示例,我將構建一個視圖模型,該模型具有兩個屬性,一個String(用於標籤)和一個SelectedItem(可以將您的組合框綁定到選定項目)。它更簡單,更強大,並且可以阻止你瀏覽視覺元素。關於xaml/wpf的美妙之處之一就在於它從你的視角分離你的邏輯。你的建議會打破這種模式。你會套住的觀點與你的邏輯,並從那裏它就會變得混亂......

1

簡單 只是這樣做

<ListViewItem Name="mainiterm" Style="{ StaticResource inboxlst}" Selected="ListViewItem_Selected_1"> 
      <Canvas Style="{StaticResource inboxcanvas}"> 
        <Label Name="namelabel" Content="lalallala1" Style="{StaticResource inboxlabel1}" /> 
       <Label Content="lalallala" Style="{StaticResource inboxlabel2}"/> 
       </Canvas> 
     </ListViewItem> 

和VB

Dim r = mlistview.Items.GetItemAt(i) 
    Dim textYear As Label = Nothing 
    Dim s As Canvas = r.Content 
    Dim a As Label = s.Children.Item(1) 
    a.Content = "Disconnected" 

一個是一個標籤,s是cavas

相關問題