代码背后和xaml中的datacontext集之间有什么区别吗?

时间:2015-10-20 04:28:35

标签: c# wpf xaml datagrid

我正在使用DataGridComboBoxColumn,如果我在XAML中将datacontext设置为Window,则意味着在ItemsSource列中加载了combobox。如果我在MainWindow之后的InitializeComponent()构建函数中将datacontext设置为后面的代码窗口,Itemssource未加载到组合框列中。

您能否就此分享任何建议?

代码:

<Window.DataContext>
        <local:OrderInfoRepositiory/>
    </Window.DataContext>

<DataGrid Name="dataGrid1"
                  Width="308"
                  Height="200"
                  HorizontalAlignment="Left"
                  VerticalAlignment="Top"
                  AutoGenerateColumns="False"
                  ItemsSource="{Binding OrderInfoCollection}">
            <DataGrid.Columns>

                <DataGridComboBoxColumn x:Name="ComboBoxColumn"                                        
                                        Header="Position"
                                        ItemsSource="{Binding ComboItemSource}"
                                         />
                <DataGridTextColumn Binding="{Binding OrderID}" Header="Name" />
            </DataGrid.Columns>
        </DataGrid>

OrderInfoRepository定义:

public class OrderInfoRepositiory : INotifyPropertyChanged
    {

        private ObservableCollection<string> comboitemSource;

        public ObservableCollection<string> ComboItemSource
        {
            get
            {
                return comboitemSource;
            }
            set
            {
                comboitemSource = value;
                RaisePropertyChanged("ComboItemSource");
            }
        }

        ObservableCollection<OrderInfo> orderCollection;
        public ObservableCollection<OrderInfo> OrderInfoCollection
        {
            get { return orderCollection; }
            set { orderCollection = value; RaisePropertyChanged("OrderInfoCollection"); }
        }        
        public OrderInfoRepositiory()
        {
            orderCollection = new ObservableCollection<OrderInfo>();
            OrderInfoCollection = GenerateOrders();

            ComboItemSource = new ObservableCollection<string>();
            ComboItemSource.Add("Germany");
            ComboItemSource.Add("Mexico");
            ComboItemSource.Add("Sweden");
            ComboItemSource.Add("France");
            ComboItemSource.Add("Spain");
            ComboItemSource.Add("Canada");
        }
}

1 个答案:

答案 0 :(得分:-1)

在xaml中设置DataContext和背后的代码存在非常小的技术差异。

当您在xaml的代码中定义它时,将首先初始化UI,然后初始化DataContext,而如果您在xaml本身中定义它,则在初始化UI本身时初始化DataContext

除非您错过了PropertyChanged中的DataContext通知,否则 在定义DataContext之间不应有任何明显区别 在xaml的代码后面或xaml本身。