我最近開始使用帶有包含WPF AutoCompleteBox的DataGridTemplateColumns的WPF Datagrid,但是我在實現這些DataGridTemplateColumns的Clipboard.Paste功能時遇到了麻煩。WPF DataGrid與DataGridTemplateColumns的粘貼功能
我已經設法通過Vishal的指南here使用內置DataGridColumns的Clipboard.Paste,但它不適用於DataGridTemplateColumns。
在DataGridColumn類的OnPastingCellClipboardContent方法中,似乎fe.GetBindingExpression(CellValueProperty)返回null而不是所需的BindingExpression。
任何人都可以指向正確的方向嗎?
public virtual void OnPastingCellClipboardContent(object item, object cellContent)
{
BindingBase binding = ClipboardContentBinding;
if (binding != null)
{
// Raise the event to give a chance for external listeners to modify the cell content
// before it gets stored into the cell
if (PastingCellClipboardContent != null)
{
DataGridCellClipboardEventArgs args = new DataGridCellClipboardEventArgs(item, this, cellContent);
PastingCellClipboardContent(this, args);
cellContent = args.Content;
}
// Event handlers can cancel Paste of a cell by setting its content to null
if (cellContent != null)
{
FrameworkElement fe = new FrameworkElement();
fe.DataContext = item;
fe.SetBinding(CellValueProperty, binding);
fe.SetValue(CellValueProperty, cellContent);
BindingExpression be = fe.GetBindingExpression(CellValueProperty);
be.UpdateSource();
}
}
謝謝!
這不適用於WPFToolkit 2010年2月發行版以及其他版本。 – Falcon 2011-08-23 08:19:56
這是記錄在某處嗎,還是通過測試發現的? ClipboardContentBinding作爲[DataGridColumn.cs]中的一個屬性存在(http://wpf.codeplex.com/SourceControl/changeset/view/40156#1544286) – Pakman 2011-08-23 14:14:46
我知道它存在,並且我已經追蹤了錯誤OP。如果仔細觀察OP發佈的代碼,那麼您會意識到儘管正在使用ClipboardContentBinding,但它會失敗。我已經通過反射寫了一個解決方法,因爲我不想創建自定義列。簡而言之:不,不適用於WPFToolkit的模板列。不過,我不知道有關.NET 4的WPF。 – Falcon 2011-08-23 14:17:58