sourcetip

ElementName 바인딩에 실패했습니다.

fileupload 2023. 5. 23. 22:18
반응형

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}"

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

바인딩할 이름 범위가 없을 수도 있습니다. 이름 범위를 바꿀 수도 있습니다.ElementName로 구성하다.Source={x:Reference DisplayMarkers}.

요점은 XAML에 시각적 또는 논리적 트리에 없는 요소가 있으면 다음과 같은 특정 바인딩을 사용할 수 없다는 것입니다.RelativeSource그리고.ElementName나는 의심합니다.DataSeries어떤 트리에도 없습니다(확실히 추상적으로 들립니다).

잠재적인 순환 종속성 오류에 대한 해결 방법은 https://stackoverflow.com/a/6858917/546730 을 참조하십시오.

차트 작성자는 FrameworkElement 등에서 파생되었을 때 수동으로 또는 재정의를 통해 논리 트리에 하위 요소를 추가해야 한다는 것을 깨닫지 못한 것 같습니다.당신은 그것을 파생할 때 무료로 얻을 수 없습니다.

논리 트리를 해제하면 ElementName으로 바인딩하는 하위 기능이 해제됩니다.

차트 개체의 작성자인 경우 이와 관련된 질문과 답변을 볼 수 있습니다.

다른 독자의 경우, 다른 가능한 원인은 다음 역할에 대한 사용자 정의 컨트롤 대신 사용자 컨트롤을 사용하는 것입니다.vf:Chart,위에.분할 버튼(차트 역할)을 작성하고 UserControl에서 사용자 지정 컨트롤로 변경하면 ElementName 바인딩이 작동합니다.

언급URL : https://stackoverflow.com/questions/9122592/elementname-binding-is-failing

반응형