【问题标题】:Is any difference between the datacontext sets in code behind and xaml?代码背后的数据上下文集和 xaml 之间有什么区别吗?
【发布时间】:2016-01-18 14:28:04
【问题描述】:

我正在使用DataGridComboBoxColumn,如果我在 XAML 中将数据上下文设置为窗口,则意味着ItemsSourcecombobox 列中加载良好。如果我在InitializeComponent() 之后的MainWindow 构造函数后面的代码中将数据上下文设置为窗口,则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");
        }
}

【问题讨论】:

标签: c# wpf xaml datagrid


【解决方案1】:

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

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

除非您在DataContext 中缺少PropertyChanged 通知,否则在xaml 的代码后面或xaml 中定义DataContext 之间不应有任何明显的区别自己。

【讨论】:

  • 我已经使用了propertychanged。也通过这个thomaslevesque.com/2011/03/21/… 一个,我能够达到我的要求。除了这个还有其他方法吗?
  • 你能发布你对OrderInfoRepositiory的类定义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多