我有一个集合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;
我的ItemsControl
的WPF代码
<ItemsControl ItemsSource="{Binding ConversationCollection}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type Models:ReceivedMessageModel}">
<UserControls:RecievedMessageBubble/>
</DataTemplate>
<DataTemplate DataType="{x:Type Models:SendMessageModel}">
<UserControls:SendMessageBubble />
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
答案 0 :(得分:1)
如果ConversationCollection
是ObservableCollection<ConversationModel>
,则它只能包含ConversationModels
,这就是为什么两个数据模板都不会被应用的原因。
如果将其类型更改为ObservableCollection<object>
,则可以同时添加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
}