【问题标题】:Get DataContext outside of style获取样式之外的 DataContext
【发布时间】:2013-06-13 21:15:36
【问题描述】:

有没有办法在样式里面访问Name?它是列表中对象的属性Foo

<DataGrid ItemsSource="{Binding Source=Foo}">
    ...
    <DataGridTextColumn Binding="{Binding Path=Name}">           // Works
        <DataGridTextColumn.EditingElementStyle>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Name}"   // Not Found

    ...
</DataGrid>

我不知道如何从DataTrigger 中引用Name。我假设我在绑定中缺少某种 Source 属性。

【问题讨论】:

  • 输出窗口说什么? “在对象上找不到......”我认为它通常会说明它正在查看的类型。您是否尝试过“{Binding}”?如果那是答案,我将作为答案重新发布

标签: wpf binding datagrid datatrigger


【解决方案1】:

以下代码似乎有效:

MainWindow.xaml

<Window x:Class="WpfScratchBox.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DataGrid ItemsSource="{Binding Foo}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name Column" Binding="{Binding Path=Name}">
                <DataGridTextColumn.EditingElementStyle>
                    <Style TargetType="TextBox">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=Name}"  Value="Test">
                                <Setter Property="Background" Value="Red" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.EditingElementStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

MainWindow.xaml.cs

using System;
using System.Collections.ObjectModel;
using System.Windows;

namespace WpfScratchBox
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Data d = new Data();
            Person a = new Person() { Name = "Person1" };
            Person b = new Person() { Name = "Person2" };
            Person c = new Person() { Name = "Test" };
            d.Foo.Add(a);
            d.Foo.Add(b);
            d.Foo.Add(c);
            this.DataContext = d;
        }
    }

    public class Data
    {
        public Data()
        {
            Foo = new ObservableCollection<Person>();
        }

        public ObservableCollection<Person> Foo { get; set; }
    }

    public class Person
    {
        public String Name { get; set; }
    }
}

这就是它的样子。

如果这对您不起作用,那么您需要向我们提供有关您的数据上下文类型等的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 2020-08-11
    • 2011-10-17
    • 2012-12-19
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多