2010-07-29 101 views
2

我花了很多時間研究這個問題;我很好奇如果可以在XAML中完全進行簡單的綁定,而不需要在後面的代碼中實現INotifyPropertyChanged。具有諷刺意味的是,在花費大量時間研究這個問題之後,我可以在代碼背後完成5次。我已經遇到了一些建議使用DataTriggers的文章(對於MenuItems,DataTrigger必須在樣式觸發器中)。我試過這個,但它沒有錯誤沒有工作。在同一個控件中綁定MenuItem屬性(IsEnabled)到組合框屬性(SelectedIndex)

我懷疑DataTrigger找不到組合框,因爲MenuItem範圍問題,我在其他線程中讀取。

任何人有任何建議嗎?

代碼:(沒有構建或運行時錯誤,但物業未更新)

<ContextMenu> 
<MenuItem Header="Do Something Neat" x:Name="MyMenuItem" Click="MyMenuItem_Click"> 
    <MenuItem.Style> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Style.Triggers> 
       <Setter Property="IsEnabled" Value="True" /> 
       <DataTrigger Binding="{Binding ElementName=MyComboBox, Path=SelectedIndex}" Value="-1"> 
        <Setter Property="IsEnabled" Value="False" /> 
       </DataTrigger>           
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem> 
</ContextMenu> 

回答

1

我感動的默認設定器Style.Triggers之前(因爲編譯錯誤的),把一切都變成Menu(簡化例如)並使其在索引0上觸發(以更好地展示結果)。以下作品:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <DockPanel LastChildFill="False"> 
     <Menu Height="23" DockPanel.Dock="Top" > 
      <MenuItem Header="Do Something Neat"> 
       <MenuItem.Style> 
        <Style TargetType="{x:Type MenuItem}"> 
         <Setter Property="IsEnabled" Value="True" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding ElementName=MyComboBox, Path=SelectedIndex}" Value="0"> 
           <Setter Property="IsEnabled" Value="False" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
     </Menu> 
     <ComboBox Name="MyComboBox" Height="23" Width="120" DockPanel.Dock="Top" > 
      <ComboBoxItem >Index0</ComboBoxItem> 
      <ComboBoxItem >Index1</ComboBoxItem> 
     </ComboBox> 
    </DockPanel> 
</Window> 
相關問題