2012-02-03 40 views
33

Tôi có XAML sau:ElementName Ràng buộc là không

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

này ràng buộc là không:. MarkerEnabled="{Binding ElementName=DisplayMarkers, Path=IsChecked}"

Tôi đang cố gắng để ràng buộc đối với tài sản IsChecked trên Checkbox của tôi có tên là 'DisplayMarkers" Khi tôi chạy này, trong chế độ gỡ lỗi trong VS 2010, cửa sổ đầu ra cho thấy các ràng buộc là không. Nó không thể tìm thấy các yếu tố có tên 'Checkbox'.Bất cứ ai có thể cho tôi biết lý do tại sao?

Lỗi tôi nhận được từ VS là :

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

Đối với người dùng trong tương lai, bạn cũng có thể gặp phải vấn đề này trên cùng một lý do. – BradleyDotNET

+1

Tôi đã giải quyết điều này bằng cách đặt 'DataContext' của mục cha thay thế và liên kết với điều đó. 'DataContext =" {Binding ElementName = DisplayMarkers} "' – kjhf

Trả lời

79

Bạn có thể không có kính ngắm tên nơi bạn cố gắng liên kết, bạn có thể thử thay thế cấu trúc ElementName bằng Source={x:Reference DisplayMarkers}.

Đối với một workaround cho các lỗi phụ thuộc chu kỳ tiềm năng thấy: https://stackoverflow.com/a/6858917/546730

+0

Chính xác. Cảm ơn bạn. Điều đó đã giải quyết được vấn đề của tôi. Tôi không thực sự hiểu vấn đề với một kính viễn vọng và tại sao tôi cần phải làm điều này. Nhưng nó hoạt động ngay bây giờ. – Hosea146

+7

@ Hosea146: Ý chính của nó là nếu bạn có các phần tử trong XAML không có trong cây trực quan hoặc logic, bạn sẽ không thể sử dụng các ràng buộc nhất định như 'RelativeSource' và' ElementName', tôi nghi ngờ rằng 'DataSeries' là không phải trong bất kỳ cây nào (chắc chắn nó nghe có vẻ trừu tượng). –

+0

Lưu ý: Tính năng này chỉ hoạt động trong .NET 4.0 và cao hơn –

4

Tôi đoán rằng tác giả của Chart, khi phát sinh từ FrameworkElement hoặc bất cứ điều gì, thất bại trong việc nhận ra rằng họ cần phải thêm bất kỳ phần tử con đến logic cây bằng tay hoặc thông qua ghi đè. Bạn không nhận được điều đó miễn phí khi bắt nguồn.

Việc phá vỡ cây logic sẽ phá vỡ khả năng trẻ em liên kết với ElementName.

If you are the author of the Chart object, you can see this related question and answer.

Các vấn đề liên quan