DataBinding Oddity - конвертер не вызывается на втором проходе - PullRequest
0 голосов
/ 19 августа 2010

У меня есть контекстное меню, которое определено как ресурс и связано с SelectedItem в DataGrid, используя конвертер для получения отображаемого имени текущего элемента, как в «Редактировать» или «Редактировать»

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

Я использую эту технику с другими ItemsControls и не могу обнаружить ничего плохого. Есть идеи?

Приветствия
Berryl

Ресурс и привязка

<ContextMenu x:Key="ProjectActivityContextMenu" x:Shared="true">
    ...
    <MenuItem Header="{Binding SelectedProjectActivity, Converter={StaticResource DeleteProjectConv}}" Command="{Binding DeleteCommand}" />
</ContextMenu>

Электропроводка

<DataGrid ...
    SelectedItem="{Binding SelectedProjectActivity}" 
    IsSynchronizedWithCurrentItem="True" 
    ContextMenu="{DynamicResource ProjectActivityContextMenu}"
 >

UPDATE

Это также происходит, если я объявлю это как часть сетки, как:

<DataGrid.ContextMenu>
    <ContextMenu >
    ....
    <MenuItem Header="{Binding SelectedProjectActivity, Converter={StaticResource DeleteProjectConv}}" Command="{Binding DeleteCommand}" />
                </ContextMenu>
</DataGrid.ContextMenu>

1 Ответ

0 голосов
/ 19 августа 2010

Я думаю, то, что вы видите, является лишь следствием определения ContextMenu как ресурса. Пока вы фактически не откроете меню, у него нет DataContext, к которому можно применить привязки, поэтому конвертер не вызывается. Это должно сохраняться, даже если вы изменили выбор несколько раз, не открывая меню. Как только вы щелкнете правой кнопкой мыши и откроете меню, DataContext будет применен, и Привязки могут быть разрешены.

...