ElementName绑定失败

Hos*_*146 37 data-binding wpf xaml

我有以下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.">
Run Code Online (Sandbox Code Playgroud)

此绑定失败: MarkerEnabled="{Binding ElementName=DisplayMarkers, Path=IsChecked}"

我正在尝试绑定到我的Checkbox上名为'DisplayMarkers'的IsChecked属性.当我运行它时,在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')
Run Code Online (Sandbox Code Playgroud)

H.B*_*.B. 93

您可能没有尝试绑定的名称范围,您可以尝试使用替换ElementName构造Source={x:Reference DisplayMarkers}.

有关潜在的周期性依赖性错误的解决方法,请参阅:https://stackoverflow.com/a/6858917/546730

  • @ Hosea146:它的要点是,如果XAML中的元素不在视觉或逻辑树中,您将无法使用某些绑定,如`RelativeSource`和`ElementName`,我怀疑`DataSeries`不是在任何树中(它确实听起来像是抽象的). (8认同)
  • 这给出了:由于周期性依赖性,无法调用MarkupExtension.ProvideValue.MarkupExtension中的属性不能引用引用MarkupExtension结果的对象.受影响的MarkupExtensions是......解决方案(令人难以置信)是http://stackoverflow.com/questions/32878883/wpf-databinding-error-in-tag-property (3认同)
  • @dudeNumber4:我知道,我在大多数与"x:Reference"相关的答案中提到它,例如http://stackoverflow.com/a/6858917/546730 (2认同)

Jer*_*ite 5

我猜测 Chart 的作者在从 FrameworkElement 或其他内容派生时未能意识到他们需要手动或通过覆盖将任何子元素添加到逻辑树中。推导时你不会免费得到它。

破坏逻辑树会破坏子级通过 ElementName 进行绑定的能力。

如果您是 Chart 对象的作者,您可以查看此相关问题和答案。