2015-06-24 67 views
1

我已經實現了一個Checked List Box(或者說,試圖實現一個選中的列表框),它已經很好了。我已經能夠使用目錄中的文件列表(這是我需要它的文件)填充它,但是當我選擇項目,然後嘗試檢查.SelectedItems屬性時,列表中沒有任何內容。從檢查列表框中檢索選定的項目?

這是XAML:

<ListBox x:Name="lbxSourceFiles" x:FieldModifier="private" SelectionMode="Multiple" Grid.Column="1" Grid.Row="2"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <ListBoxItem IsSelected="{Binding IsChecked}"> 
       <CheckBox Content="{Binding Name}" Tag="{Binding FullName 
      </ListBoxItem> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

這是我如何來填充它:

DirectoryInfo DI = new DirectoryInfo("Trivia Source Files"); 
this.lbxSourceFiles.ItemsSource = new ObservableCollection<FileInfo>(DI.GetFiles("*.xls")); 

顯然我錯了,在這裏做什麼,我見過的帖子隨處可見關於如何創建這些事情,但我無法弄清楚如何使它實際上選擇項目。

請告訴我我在做什麼錯在這裏。

回答

2

您的DataTemplate是錯誤的。您創建另一個ListBoxItem的,因此簡化了可視樹看起來是這樣的:

+- ListBox 
| +- ListBoxItem 
| | +- ListBoxItem 
| |  +- CheckBox 
| +- ListBoxItem 
| | +- ListBoxItem 
| |  +- CheckBox 
| +- ListBoxItem 
| | +- ListBoxItem 
| |  +- CheckBox 

剛剛從DataTemplate中刪除一個ListBoxItem和複選框,你找到正確的ListBoxItem的

<DataTemplate> 
    <CheckBox Content="{Binding Name}" 
     IsChecked="{Binding 
      RelativeSource={RelativeSource 
       Mode=FindAncestor, 
       AncestorType={x:Type ListBoxItem}}, 
      Path=IsSelected, 
      Mode=TwoWay}" 
    Tag="{Binding FullName}" /> 
</DataTemplate> 
+0

一套完美結合。非常感謝。 – Will