2010-10-08 9 views
9

Aşağıdaki koddan aşağıdaki hataları alıyorum ... emin değilim (ve yinede aynı 2 olmasına rağmen evet, 4 üretiyor). Oh, ve bu aynı hata çıkmadan önce bu hatalar çalışıyor olsa bile, değişken satırlar etkisi üretmez. neden sen tarzında onları beyaz ayarlarkenWPF DataBinding Hatası: 'RelativeSource FindAncestor' referansıyla bağlama için kaynak bulunamıyor

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility') 
<UserControl x:Class="MyProject.Views.RegistrationAllView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:MyProject.Views" 
      > 
    <Grid> 
     <DataGrid Name="TestGrid" Grid.Row="2" Grid.ColumnSpan="2" AutoGenerateColumns="True" 
        ItemsSource="{Binding Registrations}" SelectedValue="{Binding CurrentRegistration}" IsReadOnly="True" GridLinesVisibility="None" 
        AlternatingRowBackground="#FFCAC6C6" 
        > 
      <DataGrid.RowStyle> 
       <Style> 
        <EventSetter Event="DataGridRow.MouseDoubleClick" Handler="TestGrid_MouseDoubleClick" /> 
       </Style> 
      </DataGrid.RowStyle> 
     </DataGrid> 
    </Grid> 
</UserControl> 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

using MyProject.ViewModels; 

using WPFBase; 
using WPFBase.ViewModels; 

namespace MyProject.Views 
{ 
    public partial class RegistrationAllView : UserControl 
    { 
     public RegistrationAllView() 
     { 
      InitializeComponent(); 
     } 

     private void TestGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
     { 
      DependencyObject source = e.OriginalSource as DependencyObject; 

      RegistrationEntity entity = (RegistrationEntity)TestGrid.CurrentItem; 

      TabControl TabCollection = (TabControl)UIHelper.TryFindParentControl<TabControl>(this); 

      RegistrationForm view = new RegistrationForm(); 

      XTabItem tabItem = new XTabItem(); 
      tabItem.Header = String.Format("Registration (#{0})", entity.ID); 
      tabItem.Content = view; 

      TabCollection.Items.Add(tabItem); 

      tabItem.Focus(); 

      AbstractViewModel vm = new RegistrationViewModel(entity); 

      view.DataContext = vm; 
     } 
    } 
} 
+0

"ItemsSource" öğenizdeki nesneler için DataTemplate nerede? –

+0

@Robert Rossney: AutoGenerateColumns'a ayarladım, bu yüzden bir DataTemplate'e ihtiyacım yok. –

cevap

0

Öncelikle, WPF DataGrid en satırlar varsayılan olarak beyazdır? DataGrid.Resources bitinden tamamen kurtulabilir ve AlternationCount = 2 yerine AlternatingRowBackground = "FFCAC6C6" yazın (ilk satırın beyaz ve ikincisinin renkli olmasına neden olabilir). arka plan beyazı ayarlayan tetik. hatalar Hakkında

- senin RelativeSource seti ile herhangi ciltleri içermez sağlanan kod beri sadece iki şey sonuca varabiliriz:

1) Tam kod vermedi ve sizin relook gerek Ya İçlerinde RelativeSource bulunan bağlamalar, açıkça bir yerde bir hata olduğu için.

2) WPF'nin yerleşik DataGridini kullanmıyorsunuz. Belki de WPF toolkit DataGrid codeplex? Her ne kadar bu hataların da olmaması gerektiğine inanıyorum, yine daha olası bir sonuçtur.

+0

Kodun tamamını yayınladım, ancak yayınlamak için daha fazla şey yoktu. Önerildiği gibi AlternatingRowBackground değişiklik yaptım ve iyi çalışıyor ve daha yoğun. Hala hataları alıyorum, ancak işlevselliği veya ekranı gerçekten etkilemiyor gibi görünüyorlar. Oh, ve yerleşik Datagrid'i kullanıyorum (WPF Toolkit'ten değil). –

+0

Atası arama modunu bağlayan bazı kodlar olmalıdır. 1) Belki xmlns'deki bir sınıf: local = "clr-namespace: MyProject.Views"? 2) Ya da bazı şablonlar bir yerlerde geçersiz kılınır ... 3) DataGrid'den ItemsSource ve SelectedValue bağlantılarını kaldırırsanız hatalar ortadan kalkar mı? 4) Veritabanlarının hatalarını açıklığa kavuşturmak için bir boşluk olması gerektiğini düşünüyorum, bunun için google ve belki de bu hataların nereye atılacağı konusunda daha fazla ipucu alacaksınız. 5) Bu, kendi başına hata ayıklanamayan bir kullanıcı denetimi olduğundan, hatalar barındırma penceresinden geliyor olabilir? – Marko

7

Bu bilinen bir hatadır; Daha fazla ayrıntı için http://wpf.codeplex.com/discussions/47047 ve http://social.msdn.microsoft.com/Forums/en-GB/wpf/thread/af7cd462-febe-482b-9a04-61b076933c7b'u kontrol edin.

İlk URL'de (Codeplex) bir geçici çözüm göndereceğim; Bununla birlikte, WPF Toolkit kaynak kodunun değiştirilmesini içerir.

+0

Harika bağlantı, teşekkürler. Benim durumumda WPF'nin hacklenmesinden bu yana, en üstteki 9. gönderi> "Bulduğum tek düzeltme, HeadersVisibility =" Tümü "ve RowHeaderWidth =" 0 "öğelerini ayarlamaktır." benim için tercih edilen çözümdü. – Barton