powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / wpf devexpress DisplayTemplate и конвертор
11 сообщений из 11, страница 1 из 1
wpf devexpress DisplayTemplate и конвертор
    #39386304
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно в GridControl от DevExpress вместо численного значения, которое биндится (некие ID), вывести в ячейку строку из справочника, считая что значения в ячейках - ID записи в справочнике. Сам справочник есть во ViwModel'е.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<dxg:GridControl AutoGenerateColumns="None" ItemsSource="{Binding Document.Items}">
  <dxg:GridControl.Columns>
    <dxg:GridColumn Header="Наименование" FieldName="ItemID">
      <dxg:GridColumn.DisplayTemplate>
        <ControlTemplate>
          1) или здесь в обычный конвертор как-то передать справочник из вью-модели
          <TextBlock Text="{Binding Value}" ???/>

          2) или в мультиконвертор передать вторым параметром справочник из вью-модели
          <!--<TextBlock>
            <TextBlock.Text>
              <MultiBinding Converter="{StaticResource DisplayTextHDictionaryConverter}">
                <Binding Path="Value"/>
                <Binding Path="ModelObject.Items.Data" ???/>
              </MultiBinding>
            </TextBlock.Text>
          </TextBlock>-->

          </ControlTemplate>
        </dxg:GridColumn.DisplayTemplate>                    
      </dxg:GridControl.Columns>
    <dxg:GridControl.View>
    <dxg:TableView/>
  </dxg:GridControl.View>
</dxg:GridControl>
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386310
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,

у DEV Express есть форум и саппорт который на 90% русский, если есть языковые сложности, лучше сразу туда идти
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386438
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А для родного грида как подобное сделать?
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386472
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1А для родного грида как подобное сделать?
нормально объясните, что вы хотите, я 4 раза прочитал ваше предложение и еще больше запутался, что куда и от куда.
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386481
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно вместо ID вывести текст. Вот так я делаю для текстбокса:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
<TextBox IsReadOnly="True">
  <TextBox.Text>
    <MultiBinding Converter="{StaticResource DisplayTextDictionaryConverter}">
      <Binding Path="Document.StorageID"/>
      <Binding Path="ModelObject.Storages.Data"/>
    </MultiBinding>
  </TextBox.Text>
</TextBox>
<Button Content="..." Command="{Binding ShowStorageWindowCommand}"/>


По кнопке "Обзор" пользователь выбирает значение из справочника, выбранное значение в виде ID биндится к модели, а в текстбокс идет текстовое значение по этому ID.

Теперь нечто подобное нужно сделать для ячеек грида.
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386803
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,
как пример можете создать модель строки DataGrid, у которой будет 2 свойства - ID и TextToShow. Создаете коллекцию таких моделей, указываете её в качестве ItemSource для DataGrid, в Binding указываете свойство TextToShow. Когда нужно произвести какие-либо действия со строкой DataGrid, то обращаетесь к свойству ID.
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386833
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,

ID это уровень модели, на уровне модели представления ID должен быть преобразован в удобочитаемый вид, а на уровне View этот удобочитаемый вид должен быть представлен.
Ни каких ID во вью быть не может, если в этом нет прямой необходимости.
Объеты модели данных не должны отображаться во View, их нужно обернуть во ViewModel, для этого она и существует, чтоб данные которые невозможно или неудобно представить пользователю преобразовать в то, что пользователь может понять и осмыслить.

Если коротко, то должна быть модель подеставления, в которой есть ссылка на справочник и на список элементов, на основе этого вы создаете список элементов в нормальными названиями и отображаете его на экране.
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39386894
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так рассуждаю: есть у меня в БД две таблицы:
- Данные (ID, DocID, Name, ...)
- Справочник "Документы" (ID, Name)
Отобразим Данные в гриде. Я могу считать данные одним запросом с Join, тогда названия документов уже будут с текстовыми именами из справочника. Но я считал две таблицы и разнес их по двум спискам/коллекциям на основе классов. Коллекцию с данными (и DocID в виде числа) я прибиндил к гриду. Здесь бы подошел комобобокс в ячейке, где ItemsSource - это справочник, а SelectedValue - DocID (то есть, выходит, вью таки знает об ID!) Но вместо комбобокса нужен текстбокс (ну и кнопка Обзор для выбора). И если через конвертор, как я делал, не правильно делать, то придется как-то (как?) делать через еще один список текстовых значений... Или еще как-то. А если подобных DocID несколько..?
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39387028
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно ViewModel знает об ID, она имеет ссылку на объект из модели данных.
Вы либо невнимательно прочитали или неправильно поняли, я говорил о том, что View (представление) не должна вообще ни какая быть забиндена на Id.
В данных у вас должно быть 2 списка
1) список это справочник
2) список документов
А в модели представления 1, который вы передается в ItemSource, в котором данные будут представлены так, как вам будет удобно их отобразить.
Вы же представляете , как данные должны будут выглядеть на экране, можете представить, какими они должны быть, чтоб их было максимально удобно отобразить на экране, без лишних геморов и извращений с учётом всех требований.
Формируете список в котором элементы уже будут содержать Id (для последующей идентификации), Название, которые вы разрешите в вашем справочнике и т.д.

Поймите одну простую вещь, ViewModel служит для того, чтобы представить сложные данные в простом понятном для пользователя виде.
А View это визуальное их представление в виде элементов управления.
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39388166
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переделал модель: теперь данные из БД считываются и тут же формируется объект класса справочник. Удобно биндить и выбирать значения - оперирую сразу объектами, не надо конверторов. Единственное, если поле не сделать ридонли, то пользователь может фактически поменять значения в справочнике, а хотелось бы так выстроить модель, чтобы справочник был ридонли.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    class Dictionary
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

    сlass Document
    {
        public int ID { get; set; }
        public Dictionary DocType { get; set; }
    }

    ds.Tables[0].AsEnumerable().Select(r => new Document {
                        ID = r.Field<int>("ID"),
                        DocType = MyStatic.DocTypes.GetItemByID(r.Field<int?>("DocTypeID")),
                        ...



Код: xml
1.
2.
<TextBox IsReadOnly="True" Text="{Binding Document.DocType.Name}"/>
    <Button Content="..." Command="{Binding MyCommand}"/>
...
Рейтинг: 0 / 0
wpf devexpress DisplayTemplate и конвертор
    #39388169
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вы хотите сделать справочник ReadOnly, то используйте соответствующий модификаторы доступа и интерфейсы типа IReadOnlyList<T>
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / wpf devexpress DisplayTemplate и конвертор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]