Если файлов много, флажков будет много. Как бы вы различали их при указании одного имени?
Не ссылаться на View (элемент управления) в ViewModel. Замените коллекцию строк (коллекцию имен файлов) коллекцией File. Убедитесь, что класс File имеет два свойства: Name и IsSelected.
Затем свяжите содержимое флажка с именем, а свойство IsChecked со свойством IsSelected.
Таким образом, вам нужно только проверить свойство IsSelected в ViewMODEL, а не в представлении.
Предложение
class File : INotifyPropertyChanged // implementation not added
{
private string _name;
public string Name
{
get { return _name; }
set
{
if(_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
private boolean _isSelected;
public boolean IsSelected
{
get { return _isSelected; }
set
{
if(_isSelected != value)
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
}
}
class ViewDiskModel : INotifyPropertyChanged // implementation missing
{
private ObservableCollection<File> _files;
public ObservableCollection<File> Files
{
get
{
return _files;
}
set
{
if(_files != value)
{
_files = value;
OnPropertyChanged("Files");
}
}
}
}
XAML:
<ListBox ItemsSource="{Binding Files}" Margin="0,42,0,115" Name="lstBox1">
<ListBox.ItemTemplate>
<DataTemplate >
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}"
Content="{Binding FileName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Тогда:
private void Button2_Click(object sender, RoutedEventArgs e)
{
ViewDiskModel model = this.ContentPanel.DataContext as ViewDiskModel;
if(model.Files.Any(file => file.IsSelected))
{
model.DeleteSelectedFiles.Execute(null);
MessageBox.Show("Files Successfully Deleted.");
}
else
{
MessageBox.Show("Please select files to delete.");
}
}