我有一个绑定到TeamMembers的Datagrid。在构造函数后面的代码中:
public SetupView(SetupViewModel model)
{
InitializeComponent();
DataContext = model;
this.model = model;
ResourceGrid.ItemsSource = model.teamMembers;
ResourceGrid.DataContext = model;
}
我的ViewModel:
public class SetUpViewModel {
Tasks = new ObservableCollection<string>() { "A", "B", "C", "D" };
}
在我的XAML中,My ResourceGrid是一个包含一个ComboBoxColumn的数据网格:
<DataGridComboBoxColumn Header="Task" Width="115" ItemsSource="{Binding
Tasks}" ">
绑定中的任务是指我在视图模型中声明的Tasks Collection。但是当我运行它时它不起作用。
但是,如果我这样做,我将组合添加到模板列,然后将组合框的源组合添加到加载组合中的任务,它可以工作:
<DataGridTemplateColumn Header="Task" Width="115">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Loaded="LoadATaskEventHandler"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
private void LoadATaskEventHandler(object sender, RoutedEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
comboBox.ItemsSource=model.Tasks;
}
当datagrid支持comobocolumn时,我想在模板中添加组合框。请告知此事。
两者在性能上有什么不同,哪种解决方案最好。
答案 0 :(得分:3)
ComboBox与您的其他视图有不同的DataContext
。试试:
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType = DataGrid}, Path=DataContext.Tasks}"
我认为这些方法之间的性能差异可能是可以忽略不计的,但直接通过绑定来实现它可以更好地避免紧密耦合。