Re[7]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 04.12.09 11:09
Оценка: 10 (1)
Здравствуйте, matumba, Вы писали:

MK>>DataContext задает источник данных для Binding по умолчанию.

M>Понял, не гопник. Есть грид, у него DC. При присвоении к DC коллекции, получилась (невидимая) связка: grid<->view<->collection. View управляет сортировкой, фильтрацией, курсором текущего элемента коллекции (т.к. грид автоматом просёк, что у него источник данных — коллекция). Тут всё понятно.
Нет. Если только DC, то грид ничего не просек, потому что ты сам написал: "Получился просто пустой грид".

MK>>ItemsSource задает список, по которому ItemsControl генерирует свое содержимое.

M>Во-первых, что зн. "задаёт"? Создаёт сам или ему что-то присваивают? "Список" — список ЧЕГО? Элементов коллекции? ItemsControl уже имеет DataContext, через который имеем view с доступом к элементам, зачем тогда ItemsSource? Может, это shortcut такой? (типа grid.view.items)
Ну пускай будет "присваивает" или лучше "служит для присваивания" списка, который ItemsControl выводит на экран. DataContext служит НЕ ДЛЯ ЭТОГО. У любого Binding есть источник данных. Его можно задать явно, а можно и не задавать. Во втором случае, источником данных по умолчанию будет выступать объект, лежащий в DataContext. И ВСЁ, никаких больше сакральных смыслов в DataContext нет.

Положи на окно ListBox, назови его lb и посмотри следующие три примера:
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        this.lb.ItemsSource = new int[] { 1, 2, 3 };            
    }
}

и
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        this.lb.DataContext = new int[] { 1, 2, 3 };            
    }
}

и
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        this.lb.DataContext = new int[] { 1, 2, 3 };
        this.lb.SetBinding(ListBox.ItemsSourceProperty, new Binding(""));
    }
}


Почувствовал разницу?

В первом случае мы сказали списку: "покажи нам коллекцию 1, 2, 3"
Во втором случае мы сказали списку: "твой источник данных — 1, 2, 3" (про то, что показывать, мы не сказали)
В третьем случае мы сказали списку: "твой источник данных — 1, 2, 3 и покажи нам то, на что указывает Binding("")"
т.к. в Binding не указан ни источник, ни путь к свойству, то он просто берет источник по умолчанию, т.е. DataContext.
Re: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 02.12.09 14:53
Оценка: +1
Здравствуйте, matumba, Вы писали:

M>В конструкторе формы:

M>gridData.ItemsSource = lst;// lst — мои List<T>. Пробовал gridData.DataContext = lst; — тоже работает!
Нужно именно gridData.DataContext = lst. Иначе у тебя никакого Binding'а в ItemsSource нет.
Re[11]: [WPF] Как добраться к UpdateTarget?
От: Codechanger Россия  
Дата: 04.12.09 14:58
Оценка: +1
Здравствуйте, matumba, Вы писали:
M>Спасибо, MxKazan, теперь хоть прояснились эти чудаковатости! Буду почитать и глубжее учицца.

WPF хорош тем, что в нем есть больше одного правильного способа достичь нужного результата. Что, конечно, открывает возможности для самовыражения
[WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 02.12.09 14:41
Оценка:
Ребят, не могли бы вы помочь с WPF, плиз? Какое-то оно мощное до вычурности, что логика не помогает.
Кратенько: классическая БД морда — окно с гридом + формы редактирования. Есть коллекции ORM элементов List<T>,
которую я отображаю в гриде через ItemsSource.
Где затыка: при добавлении элементов в List<T>, я хочу руками вызывать метод UpdateTarget,
чтобы тот обновил грид (т.е. мне нет необходимости во всяких obesrvable). Однако, это метод BindingExpression'а, который у меня и не получается добыть.

Итак, сорсы

ХАМЛ:
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Name="gridData" IsReadOnly="True">
  <DataGrid.Columns>
    <DataGridTextColumn Header="Title" Binding="{Binding Title}"/>
    <DataGridTextColumn Header="Size" Binding="{Binding Size}"/>
    <DataGridCheckBoxColumn Header="Beautiful?" Binding="{Binding IsBeautiful}"/>
  </DataGrid.Columns>
</DataGrid>

C#:
В конструкторе формы:
gridData.ItemsSource = lst;// lst - мои List<T>. Пробовал gridData.DataContext = lst; - тоже работает!


По кнопке Add:
((List<T>)gridData.ItemsSource).Add(newItem);
var be = gridData.GetBindingExpression(DataGrid.ItemsSourceProperty);// вот этот be почему-то null!
be.UpdateTarget();// срываемся по null


В сети нашёл именно такое решение, но наверное где-то напортачил в XAML?...
Заранее спасибо.
Re[2]: [WPF] Как добраться к UpdateTarget?
От: Codechanger Россия  
Дата: 02.12.09 17:50
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, matumba, Вы писали:


M>>В конструкторе формы:

M>>gridData.ItemsSource = lst;// lst — мои List<T>. Пробовал gridData.DataContext = lst; — тоже работает!
MK>Нужно именно gridData.DataContext = lst. Иначе у тебя никакого Binding'а в ItemsSource нет.


Еще помогает CollectionViewSource.GetDefaultView(lst).Refresh(), в принципе..
Re[2]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 03.12.09 11:24
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Нужно именно gridData.DataContext = lst. Иначе у тебя никакого Binding'а в ItemsSource нет.


Спасибо, сработало! BindingExpression теперь живой, но UpdateTarget почему-то не работает. (если интересно, кинул проект на рапиду)

И ещё вопросик: а в чём отличие (научное) DataContext от ItemsSource? В сети ходят такие мутные документы, что понять сложно.

Здравствуйте, Codechanger, Вы писали:

C>Еще помогает CollectionViewSource.GetDefaultView(lst).Refresh(), в принципе..


Спасибо, Codechanger, работает!! Надо же, какие дебри нужно знать... Хех, а что же помешало этому UpdateTarget??
Re[3]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 03.12.09 11:28
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Еще помогает CollectionViewSource.GetDefaultView(lst).Refresh(), в принципе..


И сейчас чистослучайно нашёл: gridData.Items.Refresh(); — тоже работает!! Хотя казалось бы, причём тут Items и Refresh?...
Re[3]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 03.12.09 12:08
Оценка:
Здравствуйте, matumba, Вы писали:

M>И ещё вопросик: а в чём отличие (научное) DataContext от ItemsSource? В сети ходят такие мутные документы, что понять сложно.

DataContext задает источник данных для Binding по умолчанию.
ItemsSource задает список, по которому ItemsControl генерирует свое содержимое.

Просто часто так оказывается, что ItemsSource часто биндится на что-то, и поэтому его можно спутать с DataContext, но вообще это два совершенно разных свойства.

M>Здравствуйте, Codechanger, Вы писали:

C>>Еще помогает CollectionViewSource.GetDefaultView(lst).Refresh(), в принципе..
M>Спасибо, Codechanger, работает!! Надо же, какие дебри нужно знать... Хех, а что же помешало этому UpdateTarget??
Я вот сейчас подумал. Помешало скорее всего то, что объект, присвоенный ItemsSource по факту не изменился. Ты изменил содержимое списка, добавив туда элемент, но ссылка на сам список какая была, такая и осталась. Поэтому grid решил, что значение свойства не поменялось и забил на обновление.
Re[4]: [WPF] Как добраться к UpdateTarget?
От: Codechanger Россия  
Дата: 03.12.09 12:10
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, Codechanger, Вы писали:


C>>Еще помогает CollectionViewSource.GetDefaultView(lst).Refresh(), в принципе..


M>И сейчас чистослучайно нашёл: gridData.Items.Refresh(); — тоже работает!! Хотя казалось бы, причём тут Items и Refresh?...


Items фактически является ссылкой на CollectionView, созданный при биндинге коллекции к ItemsControl.

Когда вы биндите любую коллекцию на ItemsSource, для нее автоматически создается дефолтный CollectionView(Например, ListCollectionView).ItemsControl внутри себя работает с этим CollectionView.Советую почитать про это побольше.
Re: [WPF] Как добраться к UpdateTarget?
От: Vladek Россия Github
Дата: 03.12.09 12:11
Оценка:
Здравствуйте, matumba, Вы писали:

M>Ребят, не могли бы вы помочь с WPF, плиз? Какое-то оно мощное до вычурности, что логика не помогает.


Вот они — рендеринг текста исправили, теперь будут плодить WPF-монстров! Что через год, конечно же, благоприятно скажется на рынке труда.

Читать до посинения: ItemsControl: A to Z и WPF’s CollectionViewSource.
Re[5]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 03.12.09 12:44
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Когда вы биндите любую коллекцию на ItemsSource, для нее автоматически создается дефолтный CollectionView(Например, ListCollectionView).ItemsControl внутри себя работает с этим CollectionView.Советую почитать про это побольше.

Вот это и вводит в заблуждение Не обязательно биндится на коллекцию, она может быть просто присвоена. DataContext-Binding и ItemsSource-CollectionView — это разные механизмы.

P.S. Не, я понимаю, что ты понимаешь. Это я для топикстартера пояснил
Re[5]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 03.12.09 13:09
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Когда вы биндите любую коллекцию на ItemsSource, для нее автоматически создается дефолтный CollectionView(Например, ListCollectionView).ItemsControl внутри себя работает с этим CollectionView.Советую почитать про это побольше.


MxKazan> Не обязательно биндится на коллекцию, она может быть просто присвоена. DataContext-Binding и ItemsSource-CollectionView — это разные механизмы.

Ребят, тогда не могли бы вы поделиться, где толково и детально описан этот механизм биндингов? (вот именно про эти DataContext-Binding, ItemsSource-CollectionView).
Можно просто название книг, можно ссылками. Я скачал уже штуки 4 книжек, но понять где вода, а где толково написано, чайнику сложно, а читать сразу всё — немыслимо.

Я уже что-то читал про связку контрол-вью-коллекция, но источники варьируются от 2006 до 2009 и попадаются какие-то личноблоги а-ля "я попробовал и оно работает!". Ужасное начало для фундаментального обучения.
Re[2]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 03.12.09 13:32
Оценка:
Здравствуйте, Vladek, Вы писали:

V>Вот они — рендеринг текста исправили, теперь будут плодить WPF-монстров!


эээ... а кто "они"?

V>Читать до посинения: ItemsControl: A to Z и WPF’s CollectionViewSource.


Спасибо, Vladek, уже читаю. Страница с CollectionViewSource смущает вот этим:
So, why did we add CollectionViewSource?
The main reason was to enable those view-related operations in XAML

Т.е. у нас уже есть контрол-вью-список, но эта модель не ложится под XAML — давайте прикрутим костыль! Он тоже будет сортировать, но уже через теги. Вас не смущают подобные архитектурные изыски?
Re[3]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 03.12.09 13:47
Оценка:
Здравствуйте, matumba, Вы писали:

M>Т.е. у нас уже есть контрол-вью-список, но эта модель не ложится под XAML — давайте прикрутим костыль! Он тоже будет сортировать, но уже через теги. Вас не смущают подобные архитектурные изыски?

Что значит "тоже"? Кто сказал, что исходный список отсортирован как нам надо?
Re[4]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 03.12.09 14:00
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, matumba, Вы писали:


M>>Т.е. у нас уже есть контрол-вью-список, но эта модель не ложится под XAML — давайте прикрутим костыль! Он тоже будет сортировать, но уже через теги. Вас не смущают подобные архитектурные изыски?

MK>Что значит "тоже"? Кто сказал, что исходный список отсортирован как нам надо?

"Тоже" — значит, что мы уже имеем эту функциональность, но только через код. Цитата:

All of these features already existed in WPF before we decided to add CollectionViewSource.
We could already do filtering, sorting, grouping, we could track and set the current
item, we could retrieve the default view created by WPF and manipulate it, and we could
manually create multiple views of the same collection.
Re[5]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 03.12.09 14:22
Оценка:
Здравствуйте, matumba, Вы писали:

M>"Тоже" — значит, что мы уже имеем эту функциональность, но только через код. Цитата:

Ну, а если я не хочу через код это делать?
Re[6]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 03.12.09 14:33
Оценка:
Здравствуйте, MxKazan, Вы писали:

M>>"Тоже" — значит, что мы уже имеем эту функциональность, но только через код. Цитата:

MK>Ну, а если я не хочу через код это делать?

Значит существующие View-классы должны поддерживать разметку XAML. Никто же не изобретает ButtonSource для того, чтобы прочесть свойства Button из тегов?
Вообще, мы несколько уходим в оффтопик.
Сходу отличий DataContext от ItemsSource я не уловил, может вы пишете слишком кратко или не совсем точно?
Если нам достаточно источника данных, указанного через DataContext, почему же в ХАМЛе постоянно мельтешит ItemsSource?
Re[7]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 03.12.09 14:44
Оценка:
Здравствуйте, matumba, Вы писали:

M>Значит существующие View-классы должны поддерживать разметку XAML. Никто же не изобретает ButtonSource для того, чтобы прочесть свойства Button из тегов?

Какие существующие view-классы? Я могу просто IEnumerable использовать. Предлагаешь внести поддержку фильтрации в IEnumerable?

M>Вообще, мы несколько уходим в оффтопик.

M>Сходу отличий DataContext от ItemsSource я не уловил, может вы пишете слишком кратко или не совсем точно?
M>Если нам достаточно источника данных, указанного через DataContext, почему же в ХАМЛе постоянно мельтешит ItemsSource?
Ключевое выделено. Попробуй присвоить только DataContext, без ItemsSource
Re[3]: [WPF] Как добраться к UpdateTarget?
От: Vladek Россия Github
Дата: 03.12.09 18:45
Оценка:
Здравствуйте, matumba, Вы писали:

V>>Вот они — рендеринг текста исправили, теперь будут плодить WPF-монстров!

M>эээ... а кто "они"?

Новички, переходящие на WPF сейчас и не тратящие время на её изучение.

M>Т.е. у нас уже есть контрол-вью-список, но эта модель не ложится под XAML — давайте прикрутим костыль! Он тоже будет сортировать, но уже через теги. Вас не смущают подобные архитектурные изыски?


Нет, не смущают, потому что выбор есть: пользоваться CollectionViewSource, пользоваться наследниками CollectionView, написать свою реализацию ICollectionView.
Re[4]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 04.12.09 07:16
Оценка:
Здравствуйте, Vladek, Вы писали:

V>>>Вот они — рендеринг текста исправили, теперь будут плодить WPF-монстров!

M>>эээ... а кто "они"?
V>Новички, переходящие на WPF сейчас и не тратящие время на её изучение.

А! То есть то, что я профессионально программирую 15 лет — это ерунда, а стоило задать нетривиальный вопрос по новой для меня технологии, так я вообще чмо, так что ли?
Владек, вы сами — чмо и пожалуйста, если чешется язык, полижите у себя в другом месте.
А если вам хочется справедливого суждения, поясню: писал до этого на WinForms, сейчас поставили проект с WPF, который я изучаю одновременно с написанием кода. Времени на студенческое трындение нет, на "метод тыка" тоже. Поэтому ваше бахвальство не иначе как дебильным назвать не могу. Чуточку уважения к коллегам у вас есть?

M>>Т.е. у нас уже есть контрол-вью-список, но эта модель не ложится под XAML — давайте прикрутим костыль! Он тоже будет сортировать, но уже через теги. Вас не смущают подобные архитектурные изыски?

V>Нет, не смущают, потому что выбор есть: пользоваться CollectionViewSource, пользоваться наследниками CollectionView, написать свою реализацию ICollectionView.
Понятно. Увидел деревья, про лес забыл.

PS
Ко всем читающим, пожалуйста, даже если вам ну ОЧЕНЬ прёт прижать новичка, просто подумайте: ну насрёте человеку в душу, что, умнее станете что ли? Да, есть и лень, есть и чайниковость, но если вам так лениво отвечать, зачем вообще сотрясать форум? А если можете чем помочь, но банально лень, укажите хотя бы конкретный источник, где эта проблема описана. Одна ссылка и всего делов, зачем разводить персональный срач? Не так очевидны все эти "новшества" от мелкософт, потому и вопросов тысячи. Была бы одна ХОРОШАЯ дока, никто и вопросов не задавал бы, но сейчас по основам WPF лежит сплошное фуфло. Даже мне, начинающему, очевидна поверхностность многих "руководств". Вобщем, надежда только на опыт и профессионализм форумчан.
Re[5]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 04.12.09 07:51
Оценка:
Здравствуйте, matumba, Вы писали:

M>Ко всем читающим, пожалуйста, даже если вам ну ОЧЕНЬ прёт прижать новичка, просто подумайте: ну насрёте человеку в душу, что, умнее станете что ли? Да, есть и лень, есть и чайниковость, но если вам так лениво отвечать, зачем вообще сотрясать форум? А если можете чем помочь, но банально лень, укажите хотя бы конкретный источник, где эта проблема описана. Одна ссылка и всего делов, зачем разводить персональный срач? Не так очевидны все эти "новшества" от мелкософт, потому и вопросов тысячи. Была бы одна ХОРОШАЯ дока, никто и вопросов не задавал бы, но сейчас по основам WPF лежит сплошное фуфло. Даже мне, начинающему, очевидна поверхностность многих "руководств". Вобщем, надежда только на опыт и профессионализм форумчан.

Да не прет. И не прижимает никто, кстати. Просто мы тебе пытаемся разъяснить, что да как, а ты почему-то вместо того, чтобы попытаться въехать, сразу начинаешь писать про костыли, да про замудрённость.

Но я таки предлагаю вернуть вопрос в нужное русло Попробовал присвоить присвоить только DataContext, без ItemsSource? Чего получилось?
Re[5]: [WPF] Как добраться к UpdateTarget?
От: Codechanger Россия  
Дата: 04.12.09 08:06
Оценка:
Здравствуйте, matumba, Вы писали:

M>А! То есть то, что я профессионально программирую 15 лет — это ерунда, а стоило задать нетривиальный вопрос по новой для меня технологии, так я вообще чмо, так что ли?

M>Владек, вы сами — чмо и пожалуйста, если чешется язык, полижите у себя в другом месте.
M>А если вам хочется справедливого суждения, поясню: писал до этого на WinForms, сейчас поставили проект с WPF, который я изучаю одновременно с написанием кода. Времени на студенческое трындение нет, на "метод тыка" тоже. Поэтому ваше бахвальство не иначе как дебильным назвать не могу. Чуточку уважения к коллегам у вас есть?

А у вас есть? Просто вы задаете вопросы, ответы на которые давались уже не один десяток раз. Опять же, большинство функционала и архитектуры WPF очень подробно описаны в MSDN. Ваш вопрос про DataContext и ItemsSource показал, что вы, даже толком не прочитав про биндинги, DependencyPropeties, ItemsControl и т.д., сразу ринулись в бой с ВинФормс подходом к программированию на WPF. Так вот. Как человек, начинавший с MFC, поработавший на ВинФормс плотно и перешедший на WPF, скажу — переход просто не дается. Подобного рода вопросы у вас будут возникать, пока вы не поменяете концепцию мышления при проектировании кода и не начнете мыслить в терминах WPF. Я, честно говоря, боюсь представить, как вы сможете воспринять некоторые трюки и подходы, которые в WPF являются обыденным явлением(например, обход визуального дерева) просто потому, что с таким в WinForms вы никогда не сталкивались. Опять же, называть человека чмом и просить его где-то там полизать как-то не настраивает на доверительное и дружелюбное общение, как, впрочем, и показывает уровень общей культуры и интеллектуального развития. Хотите пофлеймить и пооскорблять — вам в СВ, тут же извольте принять тот факт, что на вопросы, которые считаются(и по сути являются) глупыми, вам по сто раз никто отвечать не будет. Максимум зададут направление для дальнейших поисков.
Re[6]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 04.12.09 09:26
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>А у вас есть?


Есть. Пролистните вверх комменты и почитайте, с чего начался вопрос и что первым же делом написал "Владек". Прочли? А теперь можете начать рассуждать об уважении. Только сначала давайте вы извинитесь за то, что пытаетесь безапелляционно выставить меня хамом?

C> Просто вы задаете вопросы, ответы на которые давались уже не один десяток раз.


Возможно, хотя мой поиск не выдал ни одного. Я надеюсь, мне не нужно вам, как ребёнку, объяснять, что сообщения вида "не ресетится ДатаКантекзд" по слову "DataContext" не находятся?
Был бы поиск так прост (гугл/рсдн), я бы просто не стал (из лени) писать сообщение.
Для интереса, поискал по ключевым словам ГОТОВОГО ОТВЕТА — выдало ваше же июльское ЕДИНСТВЕННОЕ сообщение (http://rsdn.ru/forum/dotnet.gui/3452598.flat.aspx
Автор: Codechanger
Дата: 02.07.09
). Отсюда я делаю выводы:
1) Вы врёте о "десятках ответов", пытаясь (довольно странным образом) на меня наехать. Всё просто потому, что я кое-кого ткнул в собственное хамство.
2) Задача с точки зрения программиста ТРИВИАЛЬНЕЙШАЯ, согласен, но её РЕШЕНИЕ (вот эти три ключевые компоненты) — нет. И уверен, подобными "нетривиальными подходами" усыпан весь WPF.

C> Опять же, большинство функционала и архитектуры WPF очень подробно описаны в MSDN.


Хотите начать древний спор о качестве МСДН? МСДН — это помойка, справочник, сборище фактов, что угодно, только не вразумительный материал для обучения. Тыкать в МСДН — это вежливое "отвали".

C> Ваш вопрос про DataContext и ItemsSource показал, что вы, даже толком не прочитав про биндинги....


Будьте так добры, не надо выдавать желаемое за действительное! Я бы не написал и строчки, если бы ничего не читал. Другой вопрос, что "источники" у нас вероятно были разные. Вы МНЕ это вменяете в вину? Увы, отсылаю вас к Баллмеру, вы У НЕГО спросите, почему в сети такие отвратительные документы по WPF. Что я смог понять — то смог.

C> Как человек, начинавший с MFC, поработавший на ВинФормс плотно и перешедший на WPF, скажу — переход просто не дается.


Что и случилось со мной — наткнулся на тривиальную проблему, решить которую — одна строчка, а говнофлейма "WPF профессионалы" развели на три страницы. Я правильно понимаю, я не в студенческой общаге?

C> Подобного рода вопросы у вас будут возникать, пока вы не поменяете концепцию мышления при проектировании кода и не начнете мыслить в терминах WPF.


Меньше понтов, больше конкретики. Не так много поменялось, разве что стало чуть вычурнее за счёт XML. Вы что, никогда не юзали BindingSource? Всё то же самое: Список-BindingSource-Форма. Чего нагонять туману на очевидные вещи?

C> Я, честно говоря, боюсь представить, как вы сможете воспринять некоторые трюки и подходы, которые в WPF являются обыденным явлением(например, обход визуального дерева)


Это говорит только о том, что личное чувство высокомерия вам мешает трезво взглянуть на очевидный факт: вы такой же простой прогер, коих тысячи и никак не хотите смириться с фактом, что другие люди тоже имеют мозги и способность обучаться новым финтифлюшкам от M$.
И про визуальное дерево: некогда, я писал собственный редактор форм (под .НЕТ), где очевидно была сериализация. Неужто вы думаете, что перебор чилдренов стал архисложной задачей? Трудно вам, понимаю — понты давят на мозг, знание — на вежливость... не беда, с возрастом всё лечится. Придёт время и молодые щеглы на форуме будут так же щёлкать вас своими "Капитан-Очевидность" подколками, а вы будете взывать их быть ХОТЯ БЫ вежливыми. Всё будет, я вам обещаю.

C> извольте принять тот факт, что на вопросы, которые считаются(и по сути являются) глупыми, вам по сто раз никто отвечать не будет. Максимум зададут направление для дальнейших поисков.


Нет глупых вопросов, понты — вот шоры, которые мешают вам спокойно воспринимать общение. Я уже получил ответы, даже написал свой собственный, тогда не могли бы вы объяснить, что сейчас вы делаете в этом комменте?

Спасибо ещё раз всем ответившим, проблема решилась и надеюсь, кто-то озадачится созданием FAQ'а — для таких вот КО решений.
Re[6]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 04.12.09 09:52
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Просто мы тебе пытаемся разъяснить, что да как, а ты почему-то вместо того, чтобы попытаться въехать, сразу начинаешь писать про костыли, да про замудрённость.


Какое смешное перевирание... Скажите, это у вас с садика? Вот же, у всех перед глазами тема: пишу про замудрённость (просто личное мнение), спрашиваю, мне отвечают, решение работает. Что за проблему вы пытаетесь здесь раздуть? Я прекрасно понял, как нужно извернуться, чтобы решить простую задачу — в чём спор?

MK>Но я таки предлагаю вернуть вопрос в нужное русло Попробовал присвоить присвоить только DataContext, без ItemsSource? Чего получилось?


Получился просто пустой грид. А что такого архиважного я должен был понять из этих приседаний?
Если вы хотите разъяснить разницу между DC и IS, то, откровенно, даже ваши русские предложения ничего не объясняют. Или вы недостаточно точны, или опускаете ключевые моменты.
Давайте отмотаем чуть назад?

MK>DataContext задает источник данных для Binding по умолчанию.


Понял, не гопник. Есть грид, у него DC. При присвоении к DC коллекции, получилась (невидимая) связка: grid<->view<->collection. View управляет сортировкой, фильтрацией, курсором текущего элемента коллекции (т.к. грид автоматом просёк, что у него источник данных — коллекция). Тут всё понятно.

MK>ItemsSource задает список, по которому ItemsControl генерирует свое содержимое.


Во-первых, что зн. "задаёт"? Создаёт сам или ему что-то присваивают? "Список" — список ЧЕГО? Элементов коллекции? ItemsControl уже имеет DataContext, через который имеем view с доступом к элементам, зачем тогда ItemsSource? Может, это shortcut такой? (типа grid.view.items)

Видите, как мутно выглядят объяснения? И так по всей сети. О каком же понимании может идти речь у новичков? (заметьте — новичков WPF, не программинга) Вот про то и речь.
Re[7]: [WPF] Как добраться к UpdateTarget?
От: Codechanger Россия  
Дата: 04.12.09 10:32
Оценка:
M>Видите, как мутно выглядят объяснения? И так по всей сети. О каком же понимании может идти речь у новичков? (заметьте — новичков WPF, не программинга) Вот про то и речь.

Эта. На оскорбления внимания обращать не буду, так и быть. Однако рекомендую почитать следующие книжки:

WPF unleashed,WPF essentials. Есть еще WPF controls unleashed, но для вашего уровня это будет вынос мозга.

З.Ы. А про деревья я не просто так написал, если что. Бывают ситуации, где без биндинга на пару уровней выше не обойтись.
З.Ы.Ы. Ключевыми терминами в понимании WPF с моей точки зрения являются trees, bindings,commands,templates.Опять же повторюсь — расширяйте сознание.
З.Ы.Ы.Ы.Я, конечно, подозревал, что лет в 35 наступает кризис среднего возраста, но не знал, что он проявляется так явно. Буду готовиться заранее.
Re[8]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 04.12.09 11:04
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Однако рекомендую почитать следующие книжки:

C>Есть еще WPF controls unleashed, но для вашего уровня это будет вынос мозга.

Да, это не оскорбления — это просто студенты шутят. Поразительная наглость...
Чесслово, такое ощущение, что компы высушивают мозг, а с ним и культуру общения — ввиду отсутствий физических контактов по лицевой плоскости.
Медицина, чо...

За книшки спасибо, их тоже уже скачал. Правильный источник — залог правильных знаний.

C>З.Ы. А про деревья я не просто так написал, если что. Бывают ситуации, где без биндинга на пару уровней выше не обойтись.


Хоспади, да уже всё работает! Могу привести код
public static IEnumerable<DependencyObject> EnumLogicChildren(DependencyObject depObj)
{
    foreach (var child in LogicalTreeHelper.GetChildren(depObj)) {
        if (child is TextBox || child is ComboBox || child is DatePicker || child is CheckBox)//TODO: enum all editors
            yield return (DependencyObject)child;
        if (child is DependencyObject)
            foreach (var ch in EnumLogicChildren((DependencyObject)child))
                yield return ch;
    }
}

(это мне нужно фильтр собрать из юзерского ввода)

C>З.Ы.Ы. Ключевыми терминами в понимании WPF с моей точки зрения являются trees, bindings,commands,templates.Опять же повторюсь — расширяйте сознание.


Разве кто-то с этим спорит? СЕЙЧАС некогда заниматься ни шаблонами, ни трюками — нужен просто рабочий прототип (конечно, в стиле WPF). Выйду в отпуск, почитаю.

C>З.Ы.Ы.Ы.Я, конечно, подозревал, что лет в 35 наступает кризис среднего возраста, но не знал, что он проявляется так явно. Буду готовиться заранее.


Кто бы рассуждал про кризисы... Ни в 30, ни в 40 у адекватных людей его нет. А вот переход от "я-такой-умный" к "вы-чо,-тоже-умные??" — болезненный, особенно после института, да в коммерческую команду. Ну это я так, за жизнь. Ерунда это всё — WPFы, MFC... мягкомелкие пока не добрались до идеального концепта, так что я бы знанием WPF пока не кичился.
Re[8]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 04.12.09 12:17
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>У любого Binding есть источник данных. Его можно задать явно, а можно и не задавать. Во втором случае, источником данных по умолчанию будет выступать объект, лежащий в DataContext. И ВСЁ, никаких больше сакральных смыслов в DataContext нет.


MxKazan, вы просто гений преподавания! Спасибо огромное за такой яркий пример. Клянусь, из всех источников (более пяти — точно!) НИ ОДИН не преподнёс эту простейшую мысль.
И вы всё ещё считаете, что это можно понять из MSDN?? Ну разве что гению. А вы по какой литературе это изучали?

MK>В первом случае мы сказали списку: "покажи нам коллекцию 1, 2, 3"


Один последний вопросик остался, если можно, ладно? (архитектурный) Зачем вообще нужен DC, если источник данных биндинга можно указать через source этого биндинга?
Re[9]: [WPF] Как добраться к UpdateTarget?
От: MxKazan Португалия  
Дата: 04.12.09 12:41
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, MxKazan, Вы писали:


MK>>У любого Binding есть источник данных. Его можно задать явно, а можно и не задавать. Во втором случае, источником данных по умолчанию будет выступать объект, лежащий в DataContext. И ВСЁ, никаких больше сакральных смыслов в DataContext нет.


M>MxKazan, вы просто гений преподавания! Спасибо огромное за такой яркий пример. Клянусь, из всех источников (более пяти — точно!) НИ ОДИН не преподнёс эту простейшую мысль.

Ну... эээ...

M>И вы всё ещё считаете, что это можно понять из MSDN?? Ну разве что гению. А вы по какой литературе это изучали?

Считаю одними из лучших книги Мэтью Мак-Дональда.

MK>>В первом случае мы сказали списку: "покажи нам коллекцию 1, 2, 3"

M>Один последний вопросик остался, если можно, ладно? (архитектурный) Зачем вообще нужен DC, если источник данных биндинга можно указать через source этого биндинга?
Множество объяснений на самом деле. Как минимум, это неудобно. Во вторых, не всегда источник данных можно указать явно. Ну вот, например, многие классы в WPF поддерживают шаблоны данных. В случае ItemsControl, можно задать шаблона для каждого item'а. Когда ItemsControl будет рисовать себя на экране, для каждого элемента коллекции из ItemsSource, он будет создавать набор элементов, заданных в шаблоне. Как в таком случае указать в шаблоне источник данных? У нас есть ссылка на список, но ведь нет же ссылки на конкретный элемент. Делается просто. ItemsControl создает объекты по шаблону и присваивает им в качестве DataContext конкретный item. Таким образом, мы в шаблоне тупо указываем Binding без источника. Сумбурно, конечно, написал, но это вкратце и не объяснишь. Посмотри примеры по той ссылке, что я только что привел. Да! И еще. Свойство DataContext имеет флаг Inherits. Это значит, что значение этого свойства распространяется по деревьям элементов, что в свою очередь значительно упрощает привязку.
Re[10]: [WPF] Как добраться к UpdateTarget?
От: matumba  
Дата: 04.12.09 14:09
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Считаю одними из лучших книги Мэтью Мак-Дональда.

Озон послал на 404 буквы, но я вроде бы понял про что: Pro WPF in C Sharp 2008, 2nd ed.

M>>Зачем вообще нужен DC, если источник данных биндинга можно указать через source этого биндинга?

MK>Когда ItemsControl будет рисовать себя на экране, для каждого элемента коллекции из ItemsSource, он будет создавать набор элементов, заданных в шаблоне. Как в таком случае указать в шаблоне источник данных? У нас есть ссылка на список, но ведь нет же ссылки на конкретный элемент. Делается просто. ItemsControl создает объекты по шаблону и присваивает им в качестве DataContext конкретный item. Таким образом, мы в шаблоне тупо указываем Binding без источника. Сумбурно, конечно, написал

Нет-нет, я мысль понял, описано хорошо. Это поначалу обилие "странных" свойств пугает , но это видимо потому, что концепцией биндинга пронизано всё вдоль и поперёк (там, где не ожидаешь). Надо ещё по этому поводу почитать и подумать, меня не покидает ощущение избыточности.

MK>Да! И еще. Свойство DataContext имеет флаг Inherits.

Это да, плюс к введению его даже там, где не нужно (у контейнеров, например).

Спасибо, MxKazan, теперь хоть прояснились эти чудаковатости! Буду почитать и глубжее учицца.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.