C# DataGridTextColumn以显示由代码选择的说明

C# DataGridTextColumn以显示由代码选择的说明,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,在CodeBehind,我有一个从数据库中获取的代码列表及其描述。 例如:{(代码1,描述1),(代码2,描述2)} 我将其存储为我的代码隐藏中的Dictionary StatusText 页面的数据源是一个xml文件,即加载到XmlFile中并设置为页面的数据上下文Reports是XmlFile的成员,是数据网格的源数组 datagrid的“状态”列绑定到报告。StatusCode。我需要使用StatusCode从StatusText中查找值,并在“Status”列中显示值部分 现在我需要在D

在CodeBehind,我有一个从数据库中获取的代码列表及其描述。 例如:{(代码1,描述1),(代码2,描述2)}

我将其存储为我的代码隐藏中的
Dictionary StatusText

页面的数据源是一个xml文件,即加载到
XmlFile
中并设置为页面的数据上下文
Reports
XmlFile
的成员,是数据网格的源数组

datagrid的“状态”列绑定到
报告。StatusCode
。我需要使用
StatusCode
StatusText
中查找值,并在“Status”列中显示值部分

现在我需要在DataGrid中显示代码值的相应描述,我几乎不知所措。datagrid必须是不可编辑的,因此我更喜欢DataGridTextColumn或类似的列类型

我对wpf比较陌生

XAML


好的,您的问题是您试图显示绑定到
DataGrid
的数据集合中不存在的内容。答案很简单。。。将其添加到集合中。这是一种在将其设置为
DataGrid.ItemsSource
之前执行此操作的方法:

foreach (Report report in Reports)
{
    report.StatusCode = StatusText[report.StatusCode];
}
这将用描述替换
StatusCode
属性中的代码。如果不想替换该值,则可以在
报告中添加一个额外的列
类:

public string StatusDescription { get; set; }

您是否介意共享一些代码,以便其他人更好地了解您的问题?如果这里有人能够为您提供示例解决方案代码,我们需要知道您的属性的名称和类型。请告诉我们你的课程。你面临的问题。请输入一些代码..按建议添加代码。问题点位于datagrid中的“RptStatus”。我的(键、值)对是“状态文本”。我需要根据“Report.StatusCode”的值将此值显示在“RptStatus”中,正如您可能看到的,我的网格源是“Reports”,您必须简化您的问题,有太多令人困惑的代码。谢谢@Sheridan,我通过添加一个额外的列来完成此操作。我之所以要寻找“从列表中选择”的解决方案,是因为我需要为更多的列使用相同的逻辑。虽然我知道绑定功能强大,但如果您是从早期机制迁移过来的,它太复杂了,无法很好地理解这个概念。虽然我从您上次的评论中理解您的感受,我不同意数据绑定的复杂性。。。您可以从MSDN的页面上找到所有需要了解的信息。此外,学习
绑定
将在未来的WPF应用程序中帮助您。
namespace Helper
{
    [Serializable]
    [XmlRoot("XML_FILE")]
    public class XmlFile : INotifyPropertyChanged
    {
        private Report[] _reports;

        [XmlArray("REPORTS")]
        [XmlArrayItem("REPORT", typeof (Report))]
        public Report[] Reports
        {
            get { return _reports; }
            set
            {
                if (value != _reports)
                {
                    _reports = value;
                    NotifyPropertyChanged("Reports Changed");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }

    [Serializable]
    public class Report : INotifyPropertyChanged
    {
        private string _reportType;

        [XmlAttribute("TYPE")]
        public string ReportType
        {
            get { return _reportType; }
            set
            {
                if (value != _reportType)
                {
                    _reportType = value;
                    NotifyPropertyChanged("ReportType");
                }
            }
        }

        [XmlElement("FILE")]
        public string FileName { get; set; }

        [XmlElement("S_DT")]
        public string SubmitDate { get; set; }

        [XmlElement("STAT")]
        public string StatusCode { get; set; }

        [XmlElement("OVER")]
        public string OverDue { get; set; }

        [XmlElement("INCM")]
        public string InComplete { get; set; }

        [XmlElement("DESC")]
        public string Description { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}
foreach (Report report in Reports)
{
    report.StatusCode = StatusText[report.StatusCode];
}
public string StatusDescription { get; set; }