我有一個WPF ListView控件,我動態創建列。其中一列恰好是一個CheckBox列。當用戶直接點擊CheckBox時,ListView的SelectedItem沒有改變。如果在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創建一個複選框,將導致ListView的行是選擇當用戶點擊複選框。
謝謝!
編輯:
這個問題是相似的,但不具有動態片:WPF ListView SelectedItem is null
我覺得你的poroposed解決方案更加優雅和靈活。我的解決方案是一個黑客。 – 2010-08-19 14:28:19
是的,我經歷了讓自己的應用程序適合自己的痛苦過程,並嘗試了很多事情後,我結束了上述說明。 – NVM 2010-08-19 17:51:39