2009-09-02 3 views
1

작은 문제가 있지만 잘 작동하는 XAML MenuItem DataBound ItemsSource가 있습니다. MenuItem을 볼 때 데이터 바인딩 된 항목이 없으면 ParentMenu가 비활성화되고 바인딩 오류없이 제대로 표시됩니다 (예상대로 ItemsSource가 비어 있음). ObservableCollection이 수정되고 항목이 추가되면 바인딩이 새로 고침되고 MenuItem이 나타납니다. 그러나 ItemContainerStyle은 MenuItem.Tag 속성을 데이터 바인딩 된 값으로 다시 설정하지 않습니다.이상한 XAML MenuItem DataBound ItemsSource 비어있는 항목 새로 고침 ItemsSource

ItemsSource가 빈 상태로 시작하지 않거나 결코 빈 상태로 축소되지 않는 한 MenuItem은 정상적으로 작동합니다. 누구든지 그런 문제에 대한 조언이 있습니까? 나는 ItemsSource을 가지고 싶습니다 ItemContainerStyle는 항상 올바르게 새로 고치 ItemsSource가

XAML은 다음과 같습니다 비어 시작하는 경우에도 :

<MenuItem x:Name="MenuItem" Header="Menu" ItemsSource="{Binding Source={StaticResource MenuItemViewSource}}" ItemTemplate="{StaticResource MenuDataTemplate}"> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Setter Property="Tag" Value="{Binding Path=ID, Source={StaticResource MenuItemViewSource}}"/> 
      <Setter Property="Background" Value="Red"/> 
      <Setter Property="Opacity" Value="0.5"/> 
      <EventSetter Event="Click" Handler="MenuItem_Click"/> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
    <MenuItem.Style> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}" Value="0"> 
        <Setter Property="IsEnabled" Value="False"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem> 

답변

0

그냥 추측하지만, 당신이의 ID에 결합하는 시도가 바인딩의 DataSource를 뷰 소스에 설정하지 않고 기본 데이터를? 이처럼 :

<Setter Property="Tag" Value="{Binding ID}"/> 

는 MenuItem과가 나타내는 항목 인 MenuItem의 자체의 DataContext에 결합한다 스타일에서 그렇게 바인딩. 당신이하고있는 것처럼 뷰 소스에 다시 바인딩하면 혼란 스러울 수 있습니다.

+0

ItemsSource가 설정된 MenuItem에 DataContext를 설정해야합니까? – Luke

+0

아니요, DataContext는 "부모"메뉴 항목의 ItemsSource 바인딩에있는 각 "하위"메뉴 항목으로 전달됩니다. –