Подтвердить что ты не робот

Ошибка привязки элемента ElementName

У меня есть следующий XAML:

<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')
4b9b3361

Ответ 1

У вас может не быть указатель имен, где вы пытаетесь привязать, вы можете попытаться заменить конструкцию ElementName на Source={x:Reference DisplayMarkers}.

Обходной путь для возможных циклических ошибок зависимостей см.: fooobar.com/questions/89381/...

Ответ 2

Я предполагаю, что автор диаграммы, получая из FrameworkElement или что-то еще, не понял, что им нужно добавить любые дочерние элементы в логическое дерево либо вручную, либо через переопределение. Вы не получаете это бесплатно при получении.

Ломать логическое дерево ломает способность детей связываться с ElementName.

Если вы являетесь автором объекта Chart, вы можете увидеть этот связанный вопрос и ответ.