【问题标题】:WPF datagrid not showing dataWPF数据网格不显示数据
【发布时间】:2014-04-26 13:05:09
【问题描述】:

我有一个数据网格:

<DataGrid Name="messageGrid">           
        <DataGridTextColumn Header="Revision" Binding="{Binding Message.Revision}"></DataGridTextColumn>
        <DataGridTextColumn Header="Opcode" Binding="{Binding Message.Opcode}"></DataGridTextColumn>
        <DataGridTextColumn Header="Reason" Binding="{Binding Message.Reason}"></DataGridTextColumn>
        <DataGridTextColumn Header="Reaction" Binding="{Binding Message.Reaction}"></DataGridTextColumn>
        <DataGridTextColumn Header="Projects" Binding="{Binding Message.Projects}"></DataGridTextColumn>
        <DataGridTextColumn Header="Links" Binding="{Binding Message.Links}"></DataGridTextColumn>
        <DataGridTextColumn Header="Notes" Binding="{Binding Message.Notes}"></DataGridTextColumn>       
    </DataGrid>

在预览中我没有看到我想看到的列(修订、操作码等),并且当我运行程序时我没有任何列或数据,为什么会发生这种情况?

附注 我在 Message.Revision 中有数据,等等我检查了

编辑:

我拥有用作项目源的 Message 属性的视图模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using System.Windows.Input;
using YogevAfekaRAPAT.YNIDS.Helpers;
using System.Diagnostics;
using System.Data;

namespace YogevAfekaRAPAT.YNIDS.ViewModels
{
public class MessageDetailsViewModel : NotificationObject
{
    #region Private Data Members


    private Model.Message message;


    private ObservableCollection<Model.MType> types;

    //private FileManager.fileManager fileManager;

    private Logger.Logger logger;
    #endregion


    #region Properties

    #region Types
    private ObservableCollection<Model.MType> _types;
    public ObservableCollection<Model.MType> Types
    {
        get { return _types; }
        set
        {
            if (_types != value)
            {
                _types = value;
            }
        }
    }
    #endregion

    #region Message

    public Model.Message Message
    {
        get
        {
            return message;
        }
        set
        {
            if (message == value)
            {
                return;
            }

            message = value;
            RaisePropertyChanged(() => Message);
        }
    }
    #endregion


    #endregion


    #region Ctor
    public MessageDetailsViewModel(Model.Network network, String messageName)
    {
        fileManager = FileManager.fileManager.getFileManager();
        //Message = network
        Message = network.getMessageFromName(messageName);
        Debug.WriteLine("Inside: public MessageDetailsViewModel(Model.Network network, String messageName) messageName = " + messageName + " Message.Desc = " + Message.Opcode);

    }
    #endregion

}

}

【问题讨论】:

    标签: c# wpf data-binding datagrid


    【解决方案1】:

    您必须在 &lt;DataGrid.Columns&gt; 标签下添加 Columns。

    <DataGrid>
      <DataGrid.Columns>
         .... // Add columns here.
      </DataGrid.Columns>
    </DataGrid>
    

    【讨论】:

    • 谢谢,这实际上使列出现了,但里面的数据仍然没有。你知道那可能是什么吗?
    • 您必须在 dataGrid 上设置 ItemsSource 才能获取行。
    • 好的,做了一些行,但没有数据。我的项目来源是消息(一个对象),在我写的每一行上,例如: 其中 Opcode 是消息中的一个属性.而且我里面没有任何数据。对不起所有初学者的问题,我的 wfp 技能非常低
    • 设置为 ItemsSource 的类和设置 ItemsSource 的集合。
    【解决方案2】:

    您忘记将列定义包含在 &lt;DataGrid.Columns&gt; 中:

    <DataGrid Name="messageGrid">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Revision" Binding="{Binding Message.Revision}" />
            <DataGridTextColumn Header="Opcode" Binding="{Binding Message.Opcode}" />
            <DataGridTextColumn Header="Reason" Binding="{Binding Message.Reason}" />
            <DataGridTextColumn Header="Reaction" Binding="{Binding Message.Reaction}" />
            <DataGridTextColumn Header="Projects" Binding="{Binding Message.Projects}" />
            <DataGridTextColumn Header="Links" Binding="{Binding Message.Links}" />
            <DataGridTextColumn Header="Notes" Binding="{Binding Message.Notes}" />
        </DataGrid.Columns>
    </DataGrid>
    

    您需要绑定到一个集合。尝试定义一个只返回Message 的ObservableCollection。

    public ObservableCollection<Model.Message> Messages
    {
        get { return new ObservableCollection<Model.Message> { Message }; }
    }
    

    【讨论】:

    • 谢谢,这实际上使列出现了,但里面的数据仍然没有。你知道那可能是什么吗?
    • 它已经设置为false,问题是我忘记了项目来源。但现在我有没有数据的行
    • 我的项目来源来自消息类型,它是我模型中的一个类。它只有标题(我硬编码)但没有数据
    • 但我没有消息列表。或者我应该有一个包含一个项目的列表?我查了一下,我没有消息列表。这不适合我,您还有其他建议吗?
    • 我查过了,我没有消息列表。这不适合我,您还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多