2008-11-01 102 views
2

我需要一些帮助与WPF绑定语法:等效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; } 
    } 
} 

此XAML正常工作:

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

但是我不想WebSitePricesView暴露价目表,我想绑定将DataGridCollectionViewSource直接发送到ApplicationPresenter.PriceList。

此XAML不会将任何值绑定到网格。很显然,我做错了什么在定义绑定源为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}} /> 

调试输出的第一个成功的结合是:

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) 

调试输出第二结合是:

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 

回答

1

不知道你的问题是什么,绑定(除了缺少结束引号)似乎很好。以下代码适合我。

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

我不知道,因为它是不是从你的代码很清楚其中的数据去价格表,但我看到的是,这集是第二XAML只是空的。

在这两种情况下XAML创建ObjectDataProvider的只是通过默认的构造函数创建类型ApplicationPresenter的对象。你的构造函数创建空集合PriceList。 (Ian的构造函数创建PriceList并用假数据填充它,这就是他的示例工作的原因)。

因此,您示例的第二个xaml中的DataGridCollectionViewSource基本上是指具有空PriceList的ApplicationPresenter。

与之相反,第一个xaml指的是WebSitePricesView的PriceList,我相信它在给定的代码片段之外以某种方式被填满。

如果我的理论是好的,从第一个xaml中删除ObjectDataProvider将不会伪造任何东西 - 它将会工作,因为数据直接发送到presenter.PriceList。

但是,我不能确定。