我正在使用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");
}
}
答案 0 :(得分:-1)
在xaml中设置DataContext
和背后的代码存在非常小的技术差异。
当您在xaml的代码中定义它时,将首先初始化UI,然后初始化DataContext
,而如果您在xaml本身中定义它,则在初始化UI本身时初始化DataContext
除非您错过了PropertyChanged
中的DataContext
通知,否则 在定义DataContext
之间不应有任何明显区别 在xaml的代码后面或xaml本身。