2014-12-23 2 views
0

У меня есть ListView, который заполняется коллекцией под названием Files (ObservableCollection FileViewModel), также у меня есть еще один SelectedFiles (List Guid), который удерживает в нем идентификатор выбранных файлов, как я могу привяжите это к пользовательскому интерфейсу, чтобы показать выбранные файлы с помощью элемента управления флажком.Как связать контрольное значение с другим источником

Xaml:

<ListView Grid.Column="0" Grid.Row="2" Name="lstSourceFiles" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <WrapPanel> 
        <CheckBox></CheckBox> 
        <TextBlock Text="{Binding Name}"></TextBlock> 
       </WrapPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Код:

public List<Guid> SelectedSourceFiles { get; set; } 
public ObservableCollection<FileViewModel> Files { get; set; } 

public class FileViewModel 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
} 

public partial class MainWindow : Window 
{ 
    public List<Guid> SelectedSourceFiles { get; set; } 

    public MainWindow() 
    { 

     AddHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(TreeItemSelected), true); 

    } 


    private void TreeItemSelected(object sender, RoutedEventArgs e) 
    { 
     var item = e.OriginalSource as TreeViewItem; 
     if (item == null) 
     { return; } 
     var folder = item.DataContext as FolderViewModel; 
     if (folder == null) 
     { return; } 

     if (!folder.IsFilesLoaded) 
     { 
      FileManager.LoadFiles(folder); 
     } 

     lstSourceFiles.ItemsSource = folder.Files; 


    } 


} 

ответ

0

Проще всего было бы добавить свойство "IsSelected" в режим просмотра л:

public class FileViewModel 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public bool IsSelected { get; set; } 
} 

Перебор и установить свойство:

foreach (var file in folder.Files) 
    file.IsSelected = (SelectedSourceFiles.Contains(file.Guid); 

И тогда, конечно, связываются с ней:

<CheckBox IsChecked="{Binding IsSelected}" /> 

Альтернативным к вышесказанному будет связываться с GUID и используйте IValueConverter, который проверяет выбранный список.

Смежные вопросы