2009-12-15 27 views
0

我看到了這件事,但我現在失去了它,並且找不到它。我需要的是知道哪個ListViewItem複選框存在,當複選框被選中(這將最終導致其刪除),確定哪個ListViewItem複選框存在於

我試圖得到父,但顯然這是行不通的。

XAML:

 
<ListView Name="incomingMessages" Extensions:ListViewColumns.Stretch="true" 
    Height="226" Canvas.Left="0" Canvas.Top="0" Width="755" ItemsSource="{Binding Messages}"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="Time" Width="100" DisplayMemberBinding="{Binding Time}" /> 
     <GridViewColumn Header="Message" DisplayMemberBinding="{Binding FullMessage}" /> 
     <GridViewColumn Header="Phone Number" DisplayMemberBinding="{Binding Number}" Width="85" /> 
     <GridViewColumn Header="Done" Width="45"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
      <CheckBox IsChecked="{Binding Done}" VerticalAlignment="Center" /> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 

什麼樣的代碼需要在經過事件去,使其工作? (作爲一個方面的問題,爲什麼我的VerticalAlignment不居中對齊我複選框列?)

就像我說的我試過父在這種代碼

 
     private void CheckBox_Checked(object sender, RoutedEventArgs e) 
     { 
      CheckBox cb = (CheckBox)sender; 
      object lv = cb.parent; 
     } 

如果我斷點可換股債券。父行,cb.parent爲空。

感謝, 精神科

+0

你需要檢查如果複選框被選中或不是? 或者你需要知道在其行中有一個複選框的項目的索引嗎? – Ahmy 2009-12-15 10:33:50

+0

不,複選框將一直保持開始時未勾選,當勾選框時,該行將被刪除(可能會根據客戶的意願更改爲一個按鈕,但當前規格爲複選框)。 – Psytronic 2009-12-15 10:43:08

回答

0

好了,我已經工作是做出來的這個

 
<CheckBox IsChecked="{Binding Done}" 
    Uid="{ 
    Binding Path=Items.Count, 
    Mode=OneTime, 
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}} 
    }" 
    Checked="CheckBox_Checked" 
    VerticalAlignment="Center" 
    HorizontalAlignment="Center" /> 

這是工作(除了從被加入前三,因爲它們在運行時添加,似乎繞開它,但是這將不會發生在現場版本,所以可以。但是,然後我可以看到這導致問題時刪除,因爲Uid將被維護,但數據源將不匹配。所以想法?

0

您可以使用VisualTreeHelper走了可視化樹,並找到ListViewItem。但是,如果可能的話,我建議避開這種方法。使用其他WPF功能(如數據綁定)很可能實現您的目標。

+0

多數民衆贊成我在想什麼,我目前的整個過程是綁定UID到listviewitem的索引,不知道該怎麼做,雖然 – Psytronic 2009-12-15 11:12:28

+0

我認爲這可能是這個 {Binding Path = Index,RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type ListViewItem}}} 但是它會拋出「必須爲FindAncestor指定AncestorType」。 – Psytronic 2009-12-15 11:31:44

+0

好吧,那種工作,但無法找到正確的屬性Path = [屬性] ListViewItem的當前索引。 – Psytronic 2009-12-15 11:45:04