Нужно понять, как n, когда привязки оцениваются - PullRequest
0 голосов
/ 25 октября 2010

У меня есть пользовательский элемент управления поля со списком, полученный из существующего поля со списком WPF.Эта пользовательская комбинация имеет DP под названием AssociatedEnum, после установки он оценивает списки перечислений и добавляет их в коллекцию Items. Однако все это перечисление доступных значений выполняется в загруженном событии Combo. Разумно ли предположить, что все привязки на зависимостях propsбудет установлен и оценен к их начальным значениям во время события загрузки элементов управления.

Я не очень уверен в этом, так как я видел некоторые случаи, когда Binding оценивается событием после загрузки, которое не отвечает всей цели написаниявыбор в событии загрузки.Мой вопрос я должен идти вперед и реализовать обработчик изменения свойства для этого свойства зависимости ??

Regards, v703218

Ответы [ 4 ]

0 голосов
/ 26 октября 2010

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

Например, у меня есть aaполе со списком

и у меня есть код как

public CustomCombo ()

{

this.Loaded + = OnLoaded;}

private void OnLoaded (Отправитель объекта, RoutedEventArgs e)

{

if (CustomDP! = Null) {

// Заполнение элементов внутри комбинированного списка

}}

В такой ситуации, если моя привязка не будет оценена до загрузки моей комбо, она останется пустой ... не так ли?

Некоторые считают, что этоусловие никогда не возникнет, и мой вопрос к вам таков: действительно ли это так, или привязки можно также оценить после загрузки, так как это может зависеть от Datacontext или положения в визуальном / логическом дереве

0 голосов
/ 25 октября 2010

Событие Loaded наследуется от FrameworkElement и поэтому является прямой связью с пользовательским интерфейсом. То, как вы делаете это, кажется немного странным, но это может быть потому, что я неправильно понимаю детали.

Если вы просто хотите, чтобы ComboBox предварительно заполнялся данными для пользователя, это можно сделать, просто привязав к стандартному ObservableCollection<T>, а затем настроив Стиль / шаблон ComboBox в соответствии с вашими требованиями. потребности в представлении, более конкретно ComboBox.ItemTemplate, как показано ниже ...

        <ComboBox.ItemTemplate> 
            <DataTemplate> 
                <Border>  
                    <StackPanel Orientation="Horizontal"> 
                        <TextBlock Text="{Binding Foo}" /> 
                        <TextBlock Text="{Binding Bar}" /> 
                    </StackPanel> 
                </Border> 
            </DataTemplate> 
        </ComboBox.ItemTemplate> 

Выше было бы использовать несколько элементов в объекте привязки, однако вы также можете использовать DisplayMemberPath Я думаю, что вы можете делать больше, чем нужно для создания пользовательского ComboBox .

0 голосов
/ 26 октября 2010

Спасибо, Рид ... Это то, о чем мы спорили, в большинстве случаев я и мои коллеги видели, как все привязки были разрешены и установлены на начальные значения (не на значения по умолчанию или запасные до загрузки самостоятельно).Однако я столкнулся с такой ситуацией, когда привязка оценивается после загрузки моего элемента управления, поэтому отсутствует все, что должно быть сделано в событии LOAD.

Остальные все стандартные элементы управления (элементы управления MS WPF) связываются правильно, номои пользовательские элементы управления пропускают его, потому что все делается только во время загрузки ...

У вас есть статья, которая может нас просветить?

0 голосов
/ 25 октября 2010

Мой вопрос, должен ли я пойти дальше и реализовать обработчик изменения свойства для этого свойства зависимости ??

Вы должны сделать это в любом случае. Это более безопасный способ оценки выбора, поскольку без этого вы не сможете поддерживать вызываемые изменяющиеся коллекции из кода.

Обрабатывая его здесь, вы гарантированно поймаете привязку, независимо от того, где и как она установлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...