У меня есть элемент управления ListView WPF, для которого я динамически создаю столбцы. Один из столбцов - столбец CheckBox. Когда пользователь непосредственно нажимает на CheckBox, SelectedItem ListView не изменяется. Если бы флажок был установлен в XAML, я бы добавил обработку события Click, чтобы вручную установить выбор. Тем не менее, я сильно обеспокоен тем, что это динамический столбец.WPF ListView проблема выбора с CheckBox
<ListView
SelectionMode="Single"
ItemsSource="{Binding Documents}"
View="{Binding Converter={local:DocumentToGridViewConverter}}" />
Преобразователь принимает объект, который имеет свойство, связанное с ним, есть имя/значение пара, которые можно ссылаться через индексатор.
public class DocumentToGridViewConverter : MarkupExtension, IValueConverter
{
private static DocumentToGridViewConverter mConverter;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
GridView gridView = null;
Document document = value as Document;
if(document != null)
{
// Create a new grid view.
gridView = new GridView();
// Add an isSelected checkbox complete with binding.
var checkBox = new FrameworkElementFactory(typeof(CheckBox));
gridView.Columns.Add(new GridViewColumn
{
Header = string.Empty, // Blank header
CellTemplate = new DataTemplate { VisualTree = checkBox },
});
// Add the rest of the columns from the document properties.
for(int index = 0; index < document.PropertyNames.Length; index++)
{
gridView.Columns.Add(new GridViewColumn
{
Header = document.PropertyNames[index];
DisplayMemberBinding = new Binding(
string.Format("PropertyValues[{0}]", index))
});
}
}
return gridView;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
if(mConverter == null)
{
mConverter = new DocumentToGridViewConverter();
}
return mConverter;
}
}
Итак, мой вопрос, как я dymaically создать CheckBox, которое заставит ListView строка будет выбрать, когда пользователь нажимает на CheckBox.
Спасибо!
EDIT:
Этот вопрос похожи, но не имеет динамическую часть: WPF ListView SelectedItem is null
Я чувствую, что ваше поположенное решение намного элегантнее и гибко. Мое решение - взлом. –
Да, я прошел через болезненный процесс получения этого права для своего собственного приложения, и после того, как я попробовал немало вещей, я закончил с тем, что я сказал выше. – NVM