2008-11-01 6 views
2

J'ai besoin d'aide avec la syntaxe de liaison WPF:syntaxe équivalente de liaison WPF

public class ApplicationPresenter 
{ 
    public ObservableCollection<Quotes> PriceList {get;} 
} 


public class WebSitePricesView 
{ 
    private IApplicationPresenter presenter 
    { 
     get { return (ApplicationPresenter)DataContext; } 
    } 

// public ObservableCollection<Quotes> PriceList 
// { 
//  get {return presenter.PriceList; } 
    } 
} 

Ce XAML fonctionne très bien:

<UserControl.Resources>  
    <ObjectDataProvider x:Key="ApplicationPresenterDS" ObjectType="{x:Type local:ApplicationPresenter}" /> 
    <xcdg:DataGridCollectionViewSource x:Key="price_list" Source="{Binding Path=PriceList} /> 
</UserControl.Resources>     
<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource price_list}} /> 

Cependant, je ne veux pas exposer WebSitePricesView consommations, je veux lier DataGridCollectionViewSource directement à ApplicationPresenter.PriceList.

Ce code XAML ne lie aucune valeur à la grille. Il est évident que je fais quelque chose de mal dans la définition de la liaison Source pour price_list .....

<UserControl.Resources>  
    <ObjectDataProvider x:Key="ApplicationPresenterDS" ObjectType="{x:Type local:ApplicationPresenter}" /> 
     <xcdg:DataGridCollectionViewSource x:Key="price_list" Source="{Binding Source={StaticResource ApplicationPresenterDS}, Path=PriceList />    
</UserControl.Resources> 
<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource price_list}} /> 

La sortie de débogage pour la première liaison est réussie:

Step into: Stepping over method without symbols 'Fenix.App.App' 
System.Windows.Data Warning: 52 : Created BindingExpression (hash=35059110) for Binding (hash=15586314) 
System.Windows.Data Warning: 54 : Path: 'PriceList' 
System.Windows.Data Warning: 56 : BindingExpression (hash=35059110): Default mode resolved to OneWay 
System.Windows.Data Warning: 57 : BindingExpression (hash=35059110): Default update trigger resolved to PropertyChanged 
System.Windows.Data Warning: 58 : BindingExpression (hash=35059110): Attach to Xceed.Wpf.DataGrid.DataGridCollectionViewSource.Source (hash=28137373) 
System.Windows.Data Warning: 60 : BindingExpression (hash=35059110): Use Framework mentor <null> 
System.Windows.Data Warning: 63 : BindingExpression (hash=35059110): Resolving source 
System.Windows.Data Warning: 65 : BindingExpression (hash=35059110): Framework mentor not found 
System.Windows.Data Warning: 61 : BindingExpression (hash=35059110): Resolve source deferred 
System.Windows.Data Warning: 91 : BindingExpression (hash=35059110): Got InheritanceContextChanged event from DataGridCollectionViewSource (hash=28137373) 
System.Windows.Data Warning: 63 : BindingExpression (hash=35059110): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=35059110): Found data context element: WebSitePricesXc (hash=11090012) (OK) 
System.Windows.Data Warning: 67 : BindingExpression (hash=35059110): DataContext is null 
System.Windows.Data Warning: 52 : Created BindingExpression (hash=53154844) for Binding (hash=52037308) 
System.Windows.Data Warning: 54 : Path: '' 
System.Windows.Data Warning: 56 : BindingExpression (hash=53154844): Default mode resolved to OneWay 
System.Windows.Data Warning: 57 : BindingExpression (hash=53154844): Default update trigger resolved to PropertyChanged 
System.Windows.Data Warning: 58 : BindingExpression (hash=53154844): Attach to Xceed.Wpf.DataGrid.DataGridControl.ItemsSource (hash=16991442) 
System.Windows.Data Warning: 63 : BindingExpression (hash=53154844): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=53154844): Found data context element: <null> (OK) 
System.Windows.Data Warning: 72 : BindingExpression (hash=53154844): Use View from DataGridCollectionViewSource (hash=28137373) 
System.Windows.Data Warning: 74 : BindingExpression (hash=53154844): Activate with root item <null> 
System.Windows.Data Warning: 100 : BindingExpression (hash=53154844): Replace item at level 0 with <null>, using accessor {DependencyProperty.UnsetValue} 
System.Windows.Data Warning: 97 : BindingExpression (hash=53154844): GetValue at level 0 from <null> using <null>: <null> 
System.Windows.Data Warning: 76 : BindingExpression (hash=53154844): TransferValue - got raw value <null> 
System.Windows.Data Warning: 85 : BindingExpression (hash=53154844): TransferValue - using final value <null> 
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll 
System.Windows.Data Warning: 63 : BindingExpression (hash=35059110): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=35059110): Found data context element: WebSitePricesXc (hash=11090012) (OK) 
System.Windows.Data Warning: 74 : BindingExpression (hash=35059110): Activate with root item ApplicationPresenter (hash=22260412) 
System.Windows.Data Warning: 104 : BindingExpression (hash=35059110): At level 0 - for ApplicationPresenter.PriceList found accessor RuntimePropertyInfo(PriceList) 
System.Windows.Data Warning: 100 : BindingExpression (hash=35059110): Replace item at level 0 with ApplicationPresenter (hash=22260412), using accessor RuntimePropertyInfo(PriceList) 
System.Windows.Data Warning: 97 : BindingExpression (hash=35059110): GetValue at level 0 from ApplicationPresenter (hash=22260412) using RuntimePropertyInfo(PriceList): ObservableCollection`1 (hash=40261689 Count=0) 
System.Windows.Data Warning: 76 : BindingExpression (hash=35059110): TransferValue - got raw value ObservableCollection`1 (hash=40261689 Count=0) 
System.Windows.Data Warning: 85 : BindingExpression (hash=35059110): TransferValue - using final value ObservableCollection`1 (hash=40261689 Count=0) 
System.Windows.Data Warning: 92 : BindingExpression (hash=53154844): Got PropertyChanged event from DataGridCollectionViewSource (hash=28137373) for View 
System.Windows.Data Warning: 75 : BindingExpression (hash=53154844): Deactivate 
System.Windows.Data Warning: 99 : BindingExpression (hash=53154844): Replace item at level 0 with {NullDataItem} 
System.Windows.Data Warning: 72 : BindingExpression (hash=53154844): Use View from DataGridCollectionViewSource (hash=28137373) 
System.Windows.Data Warning: 74 : BindingExpression (hash=53154844): Activate with root item DataGridCollectionView (hash=22444475 Count=0) 
System.Windows.Data Warning: 100 : BindingExpression (hash=53154844): Replace item at level 0 with DataGridCollectionView (hash=22444475 Count=0), using accessor {DependencyProperty.UnsetValue} 
System.Windows.Data Warning: 97 : BindingExpression (hash=53154844): GetValue at level 0 from DataGridCollectionView (hash=22444475 Count=0) using <null>: DataGridCollectionView (hash=22444475 Count=0) 
System.Windows.Data Warning: 76 : BindingExpression (hash=53154844): TransferValue - got raw value DataGridCollectionView (hash=22444475 Count=0) 
System.Windows.Data Warning: 85 : BindingExpression (hash=53154844): TransferValue - using final value DataGridCollectionView (hash=22444475 Count=0) 
System.Windows.Data Warning: 91 : BindingExpression (hash=35059110): Got PropertyChanged event from ApplicationPresenter (hash=22260412) 
System.Windows.Data Warning: 97 : BindingExpression (hash=35059110): GetValue at level 0 from ApplicationPresenter (hash=22260412) using RuntimePropertyInfo(PriceList): ObservableCollection`1 (hash=6408547 Count=27) 
System.Windows.Data Warning: 76 : BindingExpression (hash=35059110): TransferValue - got raw value ObservableCollection`1 (hash=6408547 Count=27) 
System.Windows.Data Warning: 85 : BindingExpression (hash=35059110): TransferValue - using final value ObservableCollection`1 (hash=6408547 Count=27) 
System.Windows.Data Warning: 92 : BindingExpression (hash=53154844): Got PropertyChanged event from DataGridCollectionViewSource (hash=28137373) for View 
System.Windows.Data Warning: 75 : BindingExpression (hash=53154844): Deactivate 
System.Windows.Data Warning: 99 : BindingExpression (hash=53154844): Replace item at level 0 with {NullDataItem} 
System.Windows.Data Warning: 72 : BindingExpression (hash=53154844): Use View from DataGridCollectionViewSource (hash=28137373) 
System.Windows.Data Warning: 74 : BindingExpression (hash=53154844): Activate with root item DataGridCollectionView (hash=61423861 Count=27) 
System.Windows.Data Warning: 100 : BindingExpression (hash=53154844): Replace item at level 0 with DataGridCollectionView (hash=61423861 Count=27), using accessor {DependencyProperty.UnsetValue} 
System.Windows.Data Warning: 97 : BindingExpression (hash=53154844): GetValue at level 0 from DataGridCollectionView (hash=61423861 Count=27) using <null>: DataGridCollectionView (hash=61423861 Count=27) 
System.Windows.Data Warning: 76 : BindingExpression (hash=53154844): TransferValue - got raw value DataGridCollectionView (hash=61423861 Count=27) 
System.Windows.Data Warning: 85 : BindingExpression (hash=53154844): TransferValue - using final value DataGridCollectionView (hash=61423861 Count=27) 

La sortie de débogage pour la deuxième liaison est:

Step into: Stepping over method without symbols 'Fenix.App.App' 
System.Windows.Data Warning: 52 : Created BindingExpression (hash=35059110) for Binding (hash=15586314) 
System.Windows.Data Warning: 54 : Path: 'PriceList' 
System.Windows.Data Warning: 56 : BindingExpression (hash=35059110): Default mode resolved to OneWay 
System.Windows.Data Warning: 57 : BindingExpression (hash=35059110): Default update trigger resolved to PropertyChanged 
System.Windows.Data Warning: 58 : BindingExpression (hash=35059110): Attach to Xceed.Wpf.DataGrid.DataGridCollectionViewSource.Source (hash=28137373) 
System.Windows.Data Warning: 63 : BindingExpression (hash=35059110): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=35059110): Found data context element: <null> (OK) 
System.Windows.Data Warning: 73 : BindingExpression (hash=35059110): Use Data from ObjectDataProvider (hash=61302538) 
System.Windows.Data Warning: 74 : BindingExpression (hash=35059110): Activate with root item ApplicationPresenter (hash=20390146) 
System.Windows.Data Warning: 104 : BindingExpression (hash=35059110): At level 0 - for ApplicationPresenter.PriceList found accessor RuntimePropertyInfo(PriceList) 
System.Windows.Data Warning: 100 : BindingExpression (hash=35059110): Replace item at level 0 with ApplicationPresenter (hash=20390146), using accessor RuntimePropertyInfo(PriceList) 
System.Windows.Data Warning: 97 : BindingExpression (hash=35059110): GetValue at level 0 from ApplicationPresenter (hash=20390146) using RuntimePropertyInfo(PriceList): ObservableCollection`1 (hash=12781633 Count=0) 
System.Windows.Data Warning: 76 : BindingExpression (hash=35059110): TransferValue - got raw value ObservableCollection`1 (hash=12781633 Count=0) 
System.Windows.Data Warning: 85 : BindingExpression (hash=35059110): TransferValue - using final value ObservableCollection`1 (hash=12781633 Count=0) 
System.Windows.Data Warning: 52 : Created BindingExpression (hash=12661120) for Binding (hash=31408037) 
System.Windows.Data Warning: 54 : Path: '' 
System.Windows.Data Warning: 56 : BindingExpression (hash=12661120): Default mode resolved to OneWay 
System.Windows.Data Warning: 57 : BindingExpression (hash=12661120): Default update trigger resolved to PropertyChanged 
System.Windows.Data Warning: 58 : BindingExpression (hash=12661120): Attach to Xceed.Wpf.DataGrid.DataGridControl.ItemsSource (hash=16991442) 
System.Windows.Data Warning: 63 : BindingExpression (hash=12661120): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=12661120): Found data context element: <null> (OK) 
System.Windows.Data Warning: 72 : BindingExpression (hash=12661120): Use View from DataGridCollectionViewSource (hash=28137373) 
System.Windows.Data Warning: 74 : BindingExpression (hash=12661120): Activate with root item DataGridCollectionView (hash=49343907 Count=0) 
System.Windows.Data Warning: 100 : BindingExpression (hash=12661120): Replace item at level 0 with DataGridCollectionView (hash=49343907 Count=0), using accessor {DependencyProperty.UnsetValue} 
System.Windows.Data Warning: 97 : BindingExpression (hash=12661120): GetValue at level 0 from DataGridCollectionView (hash=49343907 Count=0) using <null>: Data``GridCollectionView (hash=49343907 Count=0) 
System.Windows.Data Warning: 76 : BindingExpression (hash=12661120): TransferValue - got raw value DataGridCollectionView (hash=49343907 Count=0) 
System.Windows.Data Warning: 85 : BindingExpression (hash=12661120): TransferValue - using final value DataGridCollectionView (hash=49343907 Count=0) 
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll 

Répondre

1

Vous ne savez pas quel est votre problème, les liaisons (à l'exception des guillemets manquants) semblent être bonnes. Le code suivant fonctionne bien pour moi.

public class Quotes 
{ 
    public string Description { get; set; } 
    public decimal Value { get; set; } 
} 

public class ApplicationPresenter 
{ 
    public ApplicationPresenter() 
    { 
     PriceList = new ObservableCollection<Quotes>() 
     { 
      new Quotes(){Description="Quote One", Value=10m}, 
      new Quotes(){Description="Quote Two", Value=10m}, 
      new Quotes(){Description="Quote Three", Value=10m}, 
      new Quotes(){Description="Quote Four", Value=10m}, 
     }; 
    } 
    public ObservableCollection<Quotes> PriceList { get; private set; } 
} 

<Window 
    x:Class="ObjectDataProviderPresenterSample.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid" 
    xmlns:local="clr-namespace:ObjectDataProviderPresenterSample" 
    Title="Window1" 
    Height="300" 
    Width="300" 
    > 
    <Window.Resources> 
     <ObjectDataProvider 
      x:Key="ApplicationPresenterDS" 
      ObjectType="{x:Type local:ApplicationPresenter}" 
      /> 
     <xcdg:DataGridCollectionViewSource 
      x:Key="price_list" 
      Source="{Binding 
         Source={StaticResource ApplicationPresenterDS}, 
         Path=PriceList}" 
      />    
    </Window.Resources> 

    <Grid> 
     <xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource price_list}}" /> 
    </Grid> 
</Window> 
0

Je ne suis pas sûr, car il est pas très clair à partir de votre code où les données vont à consommations, mais ce que je vois est que cette collection est tout simplement vide dans la deuxième XAML.

La création de ObjectDataProvider dans xaml crée dans les deux cas un objet de type ApplicationPresenter via le constructeur par défaut. Votre constructeur crée une collection vide PriceList. (Le constructeur de Ian crée PriceList ET le remplit avec de fausses données, c'est pourquoi son exemple fonctionne). Ainsi, DataGridCollectionViewSource dans le second xaml de votre exemple fait essentiellement référence à ApplicationPresenter avec PriceList vide.

Le premier xaml, en revanche, se réfère à PriceList de WebSitePricesView qui, je crois, est en quelque sorte rempli quelque part en dehors de la tranche de code donnée.

Si ma théorie est bonne, la suppression de ObjectDataProvider du premier xaml ne servira à rien - elle fonctionnera, car les données vont directement à presenter.PriceList.

Mais, encore une fois, je ne suis pas sûr.