Создание больших наборов похожих окон в WPF - PullRequest
0 голосов
/ 16 июня 2010

Я надеюсь получить информацию от кого-то более опытного, чем я, для создания окна / набора окон для отображения данных в WPF.Вот небольшой обзор моей задачи:

  • Я получу большое количество двоичного вывода от приемника.Затем он будет проанализирован и введен в значение конкретного бита (т. Е. Word1 bit1 = Receiver Status OK ") для каждой двоичной строки.

  • Затем данные должны отображаться в виде простогокакое-то окно в формате Receiver Status OK [CheckBox привязан к значению] или Speed ​​в направлении X: [TextBlock привязан к значению]

Проблемы заключаются в следующем:

  • Существует около 60 уникальных «сообщений», которые должны отображаться, когда пользователь должен просматривать входящие данные

  • Каждое сообщение имеет разныедлина слов, каждое из которых имеет разные значения и различное количество полей, которые нужно будет отображать.

Я хотел бы знать, как вы подходите к этой ситуации. Я думал о том, чтобы идтиbrute force, одно окно на сообщение, но это кажется очень грубым. Моя другая мысль заключалась в создании единого стандартного окна с сеткой, равной размеру самого большого сообщения, и последующем заполнении его necessary TextBlocks и тому подобное.Затем я просто привязываю данные и ключи к полям для каждого сообщения и сворачиваю неиспользуемые поля.

Буду признателен за любые предложения.Заранее спасибо.

1 Ответ

0 голосов
/ 16 июня 2010

Похоже, у вас есть куча конкретных классов сообщений. Если это так, я бы создал новый DataTemplate для каждого из сообщений в Window's Resources. Для DataTemplate's x:Key должен быть указан тип класса, который он представляет. Затем вы должны установить Content из Window для экземпляра сообщения, и он выберет правильный DataTemplate для типа.

, например

<Window x:Class="MessageTest.MessageWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:lcl="clr-namespace:MessageTest">

    <Window.Resources>
        <DataTemplate x:Key="{x:Type lcl:SimpleMessage}">
            <TextBlock Text="{Binding MessageContent}" />
        </DataTemplate>
    </Window.Resources>

</Window>

А при создании Window:

private void MessageRecieved(IMessage message)
{
    var window = new MessageWindow { Content = message };
    window.Show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...