2012-02-03 126 views
33

我有以下XAML:的ElementName綁定失敗

<Grid> 
    <Grid.RowDefinitions> 
     ... 
    </Grid.RowDefinitions> 
    <DataGrid Grid.Row="0" ...> 
     <DataGrid.Columns> 
      ... 
     </DataGrid.Columns> 
    </DataGrid> 

    <DockPanel Grid.Row="2"> 
     <CheckBox x:Name="DisplayMarkers" DockPanel.Dock="Top" Content="Display Data Points?" 
       Margin="8,5,0,5" d:LayoutOverrides="Height" HorizontalAlignment="Left" IsChecked="False" /> 
     <vf:Chart DockPanel.Dock="Top" ScrollingEnabled="False" ZoomingEnabled="True" ToolBarEnabled="True"> 
      <vf:DataSeries AxisYType="Secondary" RenderAs="Line" DataSource="{Binding CdTeRoughnessList}" 
        XValueType="DateTime" 
        MarkerEnabled="{Binding ElementName=DisplayMarkers, Path=IsChecked}" Color="Navy" 
        LegendText="Roughness Std. Dev."> 

此綁定失敗:MarkerEnabled="{Binding ElementName=DisplayMarkers, Path=IsChecked}"

我想結合我的複選框財產器isChecked名爲「DisplayMarkers」當我在VS 2010的調試模式下運行這個,輸出窗口顯示綁定失敗,找不到名爲'Checkbox'的元素,有誰能告訴我爲什麼嗎?

我從VS得到的錯誤是:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 

    'ElementName=DisplayMarkers'. BindingExpression:Path=IsChecked; DataItem=null; target element is 'DataSeries' (Name=''); target property is 'MarkerEnabled' (type 'Nullable`1') 
+3

對於未來的用戶,你可以運行到上一個ContextMenu這個問題爲好,無疑是出於同樣的原因。 – BradleyDotNET 2014-05-28 00:16:42

+1

我通過設置父項的'DataContext'來解決此問題,並將其綁定到該項。 'DataContext =「{Binding ElementName = DisplayMarkers}」' – kjhf 2017-01-26 12:27:31

回答

79

您可能沒有您嘗試綁定的名稱範圍,可以嘗試用Source={x:Reference DisplayMarkers}替換ElementName構造。

對於潛在的循環依賴錯誤的解決方法,請參閱:https://stackoverflow.com/a/6858917/546730

+0

沒錯。謝謝。這解決了我的問題。我不太瞭解名稱範圍的問題,爲什麼我需要這樣做。但它現在起作用。 – Hosea146 2012-02-03 01:47:32

+7

@ Hosea146:它的要點是,如果你在XAML中有不在視覺或邏輯樹中的元素,你將不能使用像RelativeSource和ElementName這樣的特定綁定,我懷疑DataSeries是不是在任何樹中(它肯定聽起來像是抽象的)。 – 2012-02-03 01:50:02

+0

注意:這隻適用於.NET 4.0及更高版本 – 2013-12-04 23:42:36