2011-10-21 55 views
7

我有幾個數據網格的應用程序,並導出到excel命令,它獲取焦點datagrid作爲命令參數。是否可以將CommandParameter綁定到FocusManager.FocusedElement,還是必須將它們設置爲「明確」?綁定到FocusManager.FocusedElement

在此先感謝

回答

7

是的,你可以綁定到FocusedElement。例如:

<Button ... 
    CommandParameter="{Binding (FocusManager.FocusedElement), RelativeSource={RelativeSource AncestorType={x:Type Window}}}" /> 

根據您的焦點範圍,您可能需要將窗口更改爲另一個元素。但個人而言,我會設置命令的處理程序來查看參數是否爲空。如果是的話,我會以編程方式獲取FocusManager.FocusedElement

var element = parameter as DataGrid; 
if (element == null) 
    element = FocusManager.FocusedElement as DataGrid. 

您還可以根據需要搜索可視化樹以獲取關聯的DataGrid。

+0

+1。但對於代碼部分,如果我遵循MVVM模式,並且我的命令駐留在ViewModel中,那麼我不應該從那裏訪問我的UI對象。對? –

+1

@ RV1987-如果您通過CommandParameter傳遞它,您仍在訪問UI對象:) – CodeNaked

+0

Xaml方法對我不起作用,但它可能與我使用的Fluent Ribbon有關。後面的代碼工作,但你必須使用函數GetFocusedElement並將其引用傳遞給主窗口 – Twelve

1

爲什麼不能你有你的視圖模型的CLR屬性說"SelectedDataGrid"您更新任何時候你的DataGrid獲得焦點。只需在代碼中使用該屬性,而不是從View中傳遞它。

+0

我使用棱鏡,並有幾個模塊,所以我必須將此屬性添加到每個視圖模型,這當然不是用於xaml方法的最佳主意 – Twelve