2010-11-26 6 views
2

У меня есть MenuItem контекстного меню Grid и его свойство IsEnabled привязано к MyProperty. Он отлично работает, пока я на самом деле не нажму на обработчик событий MenuItem, в котором нет кода. После того, как я нажал на MenuItem, dataBinding больше не работает.WPF: управление потеряет привязку

Я могу сказать, что «моя точка останова в getter MyProperty не попадает.

любые идеи почему?

Вот код:

<my:DataGrid.ContextMenu > 
     <ContextMenu Name="restoreCntextMenu" DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}"> 
      <MenuItem Header="Data Service" Click="dataServiceToolStripMenuItem_DropDownOpening"> 
       <MenuItem Header="Start" Click="startDataToolStripMenuItem_Click" IsEnabled="{Binding MyProperty}" /> 
      </MenuItem> 
     </ContextMenu> 
    </my:DataGrid.ContextMenu> 
+1

Является ли `MyProperty`` DependencyProperty`? Если да: инфраструктура WPF не использует фактический getter для разрешения привязок, он непосредственно вызывает GetValue. Поэтому вы не можете определить, действительно ли задано значение. (Кстати, это вообще плохая идея, чтобы что-то сделать в DP (s | g) etter, а затем просто позвонить (S | G) etValue) – Vlad 2010-11-26 12:55:08

ответ

0

Контекстные меню не являются частью визуального дерева, как и все остальное, поэтому ваши привязки не будут работать, как и везде.

Вместо этого вам необходимо привязать цель размещения. См. Принятый ответ от this question.

0

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

Смежные вопросы