WPF - 从 DataTemplateSelector 中获取 DataGridCell 的值

发布于 2024-08-26 12:40:12 字数 877 浏览 12 评论 0原文

我将 DataTemplateSelector 与 WPFToolkit DataGrid 一起使用。我想根据同一行上另一个单元格的值选择一个单元格的编辑模板。

DataTemplateSelector 的 SelectTemplate 方法有两个参数:一个是网格行显示的数据项,另一个是网格单元格。

我想知道的是如何从 SelectTemplate 方法中获取另一个单元格的值。但是,我不确定通过访问单元格的属性来获取此信息的正确方法。

    public class RangeValuesEditTemplateSelector : DataTemplateSelector
{
    public DataTemplate NumberTemplate{get; set;}
    public DataTemplate TextTemplate{get; set;}

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        //TODO: need to find the correct way to populate the if condition below
        DataGridCell theCell = container as DataGridCell;


        if (theCell.something.somethingElse)
        {
            return NumberTemplate;
        }else{
            return TextTemplate;
        }

    }


}

有人可以帮忙吗?

非常感谢。

I'm using DataTemplateSelector with the WPFToolkit DataGrid. I want to select the editing template for one cell based on the value of another cell on the same row.

The DataTemplateSelector's SelectTemplate method takes two arguments: one is the data item displayed by the grid row, the other is the grid cell.

What I want to know is how to get the value of another cell from within the SelectTemplate method. However, I'm not sure of the correct way to get this information by accessing properties of the cell.

    public class RangeValuesEditTemplateSelector : DataTemplateSelector
{
    public DataTemplate NumberTemplate{get; set;}
    public DataTemplate TextTemplate{get; set;}

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        //TODO: need to find the correct way to populate the if condition below
        DataGridCell theCell = container as DataGridCell;


        if (theCell.something.somethingElse)
        {
            return NumberTemplate;
        }else{
            return TextTemplate;
        }

    }


}

Can anyone help?

Many thanks in advance.

AT

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲世九天 2024-09-02 12:40:12

我认为你需要一个 ItemViewModel。当您创建这些对象时(每一行一个); itemViewModel 应该具有在创建时或通过设置器设置的附加属性(根据您的自定义计算)。因此,如果 EachRow 有一个名为“MoreImportantThanNextOne”的属性,您可以在 ItemVM 构造函数中设置它,该构造函数接收下一行的一些数据。
然后在 TemplateSelector 覆盖中,您只需访问 ItemVM 的“MoreImportantThanNextOne”属性值即可选择正确的模板。

I think you need an ItemViewModel. When you create these objects (one for each row); The itemViewModel should have additional properties that are set (as per your custom computation) on creation or via setters. so if EachRow has a property called "MoreImportantThanNextOne", you can set it in the ItemVM ctor, which takes in some data for the next row.
Then in the TemplateSelector override, you can just access the "MoreImportantThanNextOne" property values of the ItemVM to select the right template.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文