c# - 在模型集合中获取模型的值
问题描述
我有一个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;
我的 WPF 代码ItemsControl
<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>
解决方案
如果ConversationCollection
是ObservableCollection<ConversationModel>
,它只能包含ConversationModels
这就是为什么您的数据模板都不会被应用的原因。
如果将其类型更改为 example 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
}
推荐阅读
- python - 这里导入错误的确切原因是什么?
- python - 如何从 if 语句中创建永久更改?
- stripe-payments - Stripe - 处理来自同一 IP 的多笔付款
- angular - 如何根据Angular中的虚假值选择默认下拉选项?
- visual-studio-2017 - 指定的任务可执行位置“...\packages\Microsoft.Net.Compilers.1.3.2\build\..\tools\csc.exe”无效
- scala - 如何在 Spark 或 Scala 中检查文件是否是有效的 gz
- html - 导出到 Apps Script webapp 的图表数据为空
- teamsql - TeamSQL 可以转储到文件吗
- javascript - 元素出现但不是子元素的选择器
- android - 在 Android 上的 USB 设备之间切换音频