Получение значения модели внутри коллекции моделей - PullRequest
0 голосов
/ 23 октября 2018

У меня есть коллекция ConversationModel, в которой есть две модели.Я хочу получить стоимость самого первого предмета коллекции.Я пробовал этот код var obj = ConversationCollection.First();, чтобы получить значение, но оно всегда возвращает ноль.Здесь Autos screenshot свойство модели заполняется, но за ее пределами.Как я могу получить эти значения

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>

1 Ответ

0 голосов
/ 23 октября 2018

Если 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...