【问题标题】:unable to resolve Datagrid combobox column binding无法解析 Datagrid 组合框列绑定
【发布时间】:2015-07-30 19:39:47
【问题描述】:

我有一个绑定到 TeamMembers 的 Datagrid。在构造函数后面的代码中:

 public SetupView(SetupViewModel model)
    {
        InitializeComponent();
        DataContext = model;
        this.model = model;
        ResourceGrid.ItemsSource = model.teamMembers;
        ResourceGrid.DataContext = model;
    }

我的视图模型:

public class SetUpViewModel {
Tasks = new ObservableCollection<string>() { "A", "B", "C", "D" };

}

在我的 XAML 中,我的 ResourceGrid 是一个具有一个 ComboBoxColumn 的数据网格:

      <DataGridComboBoxColumn Header="Task" Width="115"  ItemsSource="{Binding 
Tasks}"  ">

绑定中的任务是指我在视图模型中声明的任务集合。但是,当我运行它时它不起作用。

但是,如果我这样做,我将组合添加到模板列,然后将组合框的项目源添加到加载组合的任务中,它可以工作:

<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 时,我想将combobox 添加到模板中。请就此提出建议。

以及两者在性能上有什么区别,最好的解决方案是什么。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    ComboBox 的DataContext 与您视图的其余部分不同。试试:

    ItemsSource="{Binding RelativeSource={RelativeSource AncestorType = DataGrid}, Path=DataContext.Tasks}"
    

    我认为这两种方法在性能上的差异可能可以忽略不计,但直接通过绑定进行比较可以避免紧密耦合。

    【讨论】:

    • 谢谢!!在我接受之前。您能否解释一下哪种方法具有更紧密的耦合? DataTemplate 中带有 Combobox 的那个?
    • 没问题。一般来说,(包括这种情况),在代码隐藏中使用事件比数据绑定更紧密。
    • 嗨,我今天试过了,但还是不行。它无法解析 Path=DataContext.Tasks(下划线为 Tasks)。我在代码中提供了我的网格的数据上下文 ResourceGrid.DataContext = model;我的模型有 Observable 集合 Tasks :(
    • 首先,确保 LoadATaskEventHandler 事件处理程序不再执行任何操作,因为这可能会干扰绑定。另外,去掉视图构造函数中的ResourceGrid.ItemsSource = model.teamMembers;,因为这可能会干扰绑定。
    • 无论出于何种原因,您的网格似乎没有绑定到 SetupViewModel
    猜你喜欢
    • 2018-01-17
    • 2014-09-13
    • 2016-05-02
    • 1970-01-01
    • 2015-12-17
    • 2016-12-10
    • 1970-01-01
    • 2022-10-07
    • 2013-09-30
    相关资源
    最近更新 更多