2011-11-09 55 views
0

由於我們的軟件的性質,我們必須在代碼中動態創建我們的DataGrid列的後面,然後將其添加到DataGrid這樣的:如何將工具提示的內容綁定到代碼中的MVVM屬性?

DataGridBoundColumn dataGridBoundColumn = new DataGridTextColumn 
                  { 
                   CellStyle = ...,                    
                   Header = header, 
                   Binding = binding 
                  }; 
reportDataGrid.Columns.Add(dataGridBoundColumn); 

現在,我們需要對的columnHeader工具提示:

ToolTipService.SetToolTip(dataGridBoundColumn, "ENTER VALUE"); 

那麼工作得很好。不過,我需要將工具提示的值綁定到ViewModel上的屬性。我知道如何在xaml中執行此操作,但不知道如何在代碼中執行此操作。

任何幫助,將不勝感激,

UPDATE:

感謝史蒂夫的答案,我能略有不同解決這個問題:

Binding bindingBoundToTooltipProperty = new Binding() 
            { 
             Source = reportDataGrid.DataContext, 
             Path = new PropertyPath("ToolTipSorting") 
            }; 


BindingOperations.SetBinding(dataGridBoundColumn, ToolTipService.ToolTipProperty, bindingBoundToTooltipProperty); 

如果DataGridColumnHeaderStyle是定製的,確保將這些行添加到模板以及:

<Trigger Property="IsMouseOver" Value="True"> 
    <Setter Property="ToolTip" Value="{Binding Column.(ToolTipService.ToolTip), RelativeSource={RelativeSource Self}}"/> 
</Trigger> 

回答

3

您應該能夠建立一個如下結合:

BindingOperations.SetBinding(dataGridBoundColumn, 
    ToolTipService.ToolTipProperty, 
    new Binding("Path.To.My.Property")); 

注:此DataContext將是Header財產上的列

你希望綁定到一個屬性的值在視圖模型上;假設你的視圖模型是DataContextDataGrid你想更改綁定的東西,如:

new Binding("DataContext.ToolTipSorting") 
{ 
    RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor) 
    { 
     AncestorType = typeof(DataGrid) 
    } 
} 

這試圖找到DataGrid類型的第一個父對象,並抓住其DataContext.ToolTipSorting屬性的值。

+0

謝謝史蒂夫。我得到System.Windows.Data錯誤:2:找不到控制目標元素的FrameworkElement或FrameworkContentElement。 BindingExpression:路徑= ToolTipSorting;的DataItem = NULL;目標元素是'DataGridTextColumn'(HashCode = 42996073);目標屬性是'工具提示'(類型'對象') – Houman

+0

如果Datacontext位於標題上,請如何綁定到我的ViewModel上的MVVM屬性「ToolTipSorting」? – Houman

+0

我不是100%確定'DataContext'是'Header'屬性 - 你可以將綁定路徑留空以查看示例中的數據上下文是什麼類型? –

相關問題