C# 在模型集合中获取模型的值

C# 在模型集合中获取模型的值,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我有一个集合ConversationModel,其中有两个模型。我想得到收藏的第一件物品的价值。我尝试了以下代码var obj=ConversationCollection.First()获取值,但它始终返回null。此处填充了模型的属性,但不在其范围内。我如何获得这些值 public class ConversationModel { public SendMessageModel SMM { get; set; } public ReceivedMessageModel R

我有一个集合
ConversationModel
,其中有两个模型。我想得到收藏的第一件物品的价值。我尝试了以下代码
var obj=ConversationCollection.First()
获取值,但它始终返回null。此处填充了模型的属性,但不在其范围内。我如何获得这些值

public class ConversationModel
{
    public SendMessageModel SMM { get; set; }

    public ReceivedMessageModel RMM { get; set; }
}
以下是我创建收藏的方式:

 ObservableCollection<ConversationModel> cm = new ObservableCollection<ConversationModel>();

        foreach (DataRow convo in dataTable.Rows)
        {
            string _messageID = (string)convo["MessageID"];
            string message = (string)convo["UserMessage"];
            string username = (string)convo["FromUser"];
            DateTime datetime = (DateTime)convo["MessageDateTime"];
            string messageStatus = (string)convo["MessageStatus"];

            string mdt = "";
            if (datetime.Date == DateTime.Now.Date) mdt = datetime.ToString("t");

            if (username == ClientUsername)
            {                   
                SendMessageModel smm = new SendMessageModel
                {
                    MessageIdentifier = _messageID,
                    UserDisplayName = ClientDisplayName,
                    SendMessage = message,
                    MessageTime = mdt,
                    MessageStatus = (Status)Enum.Parse(typeof(Status), messageStatus)
                };
                cm.Add(new ConversationModel { SMModel = smm });
            }
            else
            {
                ReceivedMessageModel rmm = new ReceivedMessageModel
                {
                    MessageIdentifier = _messageID,
                    ClientDisplayName = RecipientDisplayName,
                    MessageTime = mdt,
                    ReceivedMessage = message
                };
                cm.Add(new ConversationModel { RMM = rmm });
            }
        }

        ConversationCollection = cm;

如果
ConversationCollection
是一个
ObservableCollection
,则它只能包含
ConversationModels
,这就是您的两个数据模板都不会被应用的原因

如果将其类型更改为例如
observedcollection
,则可以向其添加
ReceivedMessageModels
SendMessageModels

然后,您可以通过施放以下物品重新获得第一件物品:

var receivedMessageModel = ConversationCollection[0] as ReceivedMessageModel;
if (receivedMessageModel != null)
{
    //the first item is a ReceivedMessageModel
}
else
{
    var sendMessageModel = ConversationCollection[0] as SendMessageModel;
    // the first item is A SendMessageModel
}

在集合的每个条目中,您的模型似乎都是空的。你能告诉我你在哪里把模型添加到集合中/你在哪里创建集合吗?我添加了创建集合的代码。你的问题看起来很混乱-你的
ConversationModel
类有
SendMessageModel
ReceivedMessageModel
属性,而你的cm集合只包含单个
SendMessageModel
ReceivedMessageModel
实例。这些类是否扩展了会话模型?另外,您正在将cm构建为一个局部变量,但您正在查看的是哪个集合是空的?@Peregrine最后一行
ConversationCollection=cm您的代码不一致。如果此处显示的是ConversationModel,即具有SendMessageModel和ReceivedMessageModel属性的类,则无法将SendMessageModel或ReceivedMessageModel实例添加到
cm
var receivedMessageModel = ConversationCollection[0] as ReceivedMessageModel;
if (receivedMessageModel != null)
{
    //the first item is a ReceivedMessageModel
}
else
{
    var sendMessageModel = ConversationCollection[0] as SendMessageModel;
    // the first item is A SendMessageModel
}