Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Показ неявно ссылаемого объекта в SL\WPF, binding возможен? 
:(
    Опции темы
jonie
Дата 15.12.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



Пусть существует два DTO:
Код

class A{
 public int bRefId;
// public other data...
}
class B {
 public int Id;
}

Как в разметке я могу (или не могу?) используя Binding и имея DataContext равным ссылкой на экземпляр А, вывести данные класса B.

Я придумал только вариант использования TypeConverter-а в виде 
Код

<someelement Text="{Binding bRefId, Converter={StaticResource EnumConverter}}" />
но в этом случае, для доступа ко многим свойствам B придется писать много конверторов....

Это сообщение отредактировал(а) jonie - 15.12.2009, 20:22


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
tol05
Дата 15.12.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



А где здесь хоть какая-нибудь связь между классами A и B?
И где здесь DTO?



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
jonie
Дата 15.12.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



A и B DTO-шные классы. Разве нет?

ссылка "неявная" (если так можно назвать) по полю bRefId (я думаю это понятно) (Связь 1-1 классическая).
в TypeConverter-е я могу сделать нечто вроде : ctx.B.Where(x=>x.Id == value).First();

Дело в том что такая надобность возникла в ходе работы с EF-ком, который очень не любит циклические ссылки, а подобные DTO классы генерирует WCF RIA Services.

Это сообщение отредактировал(а) jonie - 15.12.2009, 23:18


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
tol05
Дата 16.12.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



Цитата(jonie @  15.12.2009,  22:17 Найти цитируемый пост)
A и B DTO-шные классы. Разве нет?

после того, как был упомянут LINQ - возможно да ). Но до того.. какой-то класс с единственным полем - и догадаться, что это EF DTO... не смог

Одним словом...у меня получилось "сплясать" так
Код

public class A
    {
        public string Text { get; set; }
        public B B { get; set; }
    }

    public class B
    {
        public string Name { get; set; }
        public string Description { get; set; }
    }
...
public Window1()
        {
            this.DataContext = new A { Text = "text", B = new B { Description = "desc", Name = "N1" } };
            
            InitializeComponent();
        }

Код

<TextBlock DataContext="{Binding Path=B}" Text="{Binding Path=Description}"/>



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
jonie
Дата 16.12.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



Цитата

после того, как был упомянут LINQ - возможно да ). Но до того.. какой-то класс с единственным полем - и догадаться, что это EF DTO... не смог
DTO никаким образом к EF  или LINQ не относился никогда.


tol05, хех, у тебя явная ссылка есть на B в классе А. Так все умеют (можно быо Path=B.Description прописать просто без смены контекста у элемента). У меня же ссылки нет, есть только ID объекта, и коллекция, из которой этот объект надо вытянуть (найти) по ID.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
tol05
Дата 16.12.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



тогда не знаю )

даже если предположить, что можно использовать Notifications при изменении одного ID на другой (чтобы вытянуть новые данные по этому ID из коллекции)... Не вижу в этом выигрыша по сравнению с написанием конвертеров.
Кстати, конвертеры - часто предлагаемый аппроач, также...


Цитата(jonie @  15.12.2009,  23:53 Найти цитируемый пост)
DTO никаким образом к EF или LINQ не относился никогда.

отчего же? а при помощи чего LINQ данные переносит из источника?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
jonie
Дата 16.12.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



вот такой придумал (наткнулся в одной либе) способ: сделать TypeConverter для Funct<object, object, object>
Код

        public class FuncValueConverter : IValueConverter
        {
            private readonly Func<object, object, object> convertFunc;

            public FuncValueConverter(Func<object, object, object> convertFunc)
            {
                this.convertFunc = convertFunc;
            }

            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                return this.convertFunc(value, parameter);
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

суть в том, что теперь можно делать нормальнй байдинг на функцию фактически.... т.о. не надо под каждый такой ID рисовать конвертер (хотя это спорный метод с т.з. понятности)...

Добавлено через 53 секунды
Цитата


Цитата


DTO никаким образом к EF или LINQ не относился никогда.


отчего же? а при помощи чего LINQ данные переносит из источника? 
DTO это паттерн программирования, LINQ это технология. Соленое со сладким в общем не надо мешать.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.