wpf datagrid:在文本框列中写入值

wpf datagrid:在文本框列中写入值,wpf,datagrid,datagridtextcolumn,Wpf,Datagrid,Datagridtextcolumn,我有一个带有一些列的数据网格。它绑定到对象列表。 其中一列是文本列:我需要它作为“验证”列,事实上,我希望,根据其他单元格中的值,对于每一行,此单元格的值为“OK”或“NOT OK”。我不知道如何将字符串写入数据网格中的某个单元格。 有什么建议吗 编辑: 遵循描述DataGrid对象的类 public class BracketProperty { [XmlAttribute] public int index { get; set; } public BracketTy

我有一个带有一些列的数据网格。它绑定到对象列表。 其中一列是文本列:我需要它作为“验证”列,事实上,我希望,根据其他单元格中的值,对于每一行,此单元格的值为“OK”或“NOT OK”。我不知道如何将字符串写入数据网格中的某个单元格。 有什么建议吗

编辑: 遵循描述DataGrid对象的类

public class BracketProperty
{
    [XmlAttribute]
    public int index { get; set; }
    public BracketType type { get; set;}
    public List<BracketPoint> bracketPointsList;
    [XmlIgnore]
    public String isPointSelectionEnded { get; set; }
}
其中,
括号
定义为

 public ObservableCollection<BracketProperty> brackets;
公共可观测集合括号;
因为不是绑定…如何将其更改为绑定?

使用值转换器

public partial class MainWindow : Window
{
    public ObservableCollection<Employee> EmpList { get; set; }
    public MainWindow()
    {

        InitializeComponent();
        this.DataContext = this;
        EmpList = new ObservableCollection<Employee> { 
            new Employee(1, "a"), 
            new Employee(2, "b"), 
            new Employee(3, "c") };
    }
}

public class NumValueConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int v = int.Parse(value.ToString());
        if (v < 3) 
            return "YES";
        else 
            return "NO";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

public class Employee
{
    public int Salary { get; set; }
    public string Name { get; set; }

    public Employee(int s, string n)
    {
        Salary = s;
        Name = n;
    }
}
公共部分类主窗口:窗口
{
公共可观测集合模板{get;set;}
公共主窗口()
{
初始化组件();
this.DataContext=this;
EmpList=新的可观察集合{
新员工(1,“a”),
新员工(2,“b”),
新雇员(3,“c”)};
}
}
公共类NumValueConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
int v=int.Parse(value.ToString());
if(v<3)
返回“是”;
其他的
返回“否”;
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
公营雇员
{
公共整数{get;set;}
公共字符串名称{get;set;}
公共雇员(整数s,字符串n)
{
工资=s;
Name=n;
}
}
XAML


最简单的方法是为
数据网格中的每一列创建一个具有
public
属性的数据类型类。您应该在这个类中实现接口

然后,您可以在
PropertyChanged
处理程序中更新一个属性:

private void YourDataType_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (Property1 == "SomeValue" && Property2 > 0) ValidationProperty = "OK";
    else ValidationProperty = "NOT OK"; // Add your own condition above of course
}
在构造函数中:

PropertyChanged += YourDataType_PropertyChanged;

我需要自己回答这个问题。我没有实现任何INotifyPropertyChanged接口或转换器…在设置控件变量的值后,添加的唯一代码如下:

 this.DataGrid.Items.Refresh();
并且文本正确显示在网格中


但是,最好按照MVVM模式规则实现INotifyPropertyChanged。

问题基于其他列中的值我已经为DataGrid的每一列提供了一个具有公共属性的数据类型类(我在上面的问题中添加了它)。问题是,如果我在该类中实现INotifyPropertyChanged,它会在启动时引发异常,因为字段isPointSelectionEnded上的循环。如何以正确的方式实现接口?请注意,我在不同的类之间进行工作。在我的回答中,我为您提供了指向MSDN(第2行)上的
INotifyPropertyChanged
页面的链接。。。单击它并按照该页面上的帮助进行操作。如果我实现INotifyPropertyChanged,并在setter中将值更改为“Not ok”,则值会更改,但网格不会自动更新…并且我看到了旧值…刷新项是否好?我这样问是因为它会随机引发一个异常,如“AddNew或EditItem事务期间不允许刷新”。当您正确实现
INotifyPropertyChanged
接口时,您的
public
属性在设置后应调用
INotifyPropertyChanged.PropertyChanged
事件。这将“刷新”UI中的该字段。因此,请使用
public
属性设置值,以确保事件被调用。我已经这样做了,但UI没有刷新值…有人告诉我这可能是绑定问题…我更新了问题中的代码
PropertyChanged += YourDataType_PropertyChanged;
 this.DataGrid.Items.Refresh();