종속성 속성이 WPF 컨텍스트 메뉴에 표시되는 목록의 내용을 만들려고합니다.WPF 컨텍스트 메뉴가 List <> 종속성 속성에 바인딩되었습니다.
나는 다음과 같은 종속성 속성을 가진 클래스, 푸의 (데이터 보유 클래스)의 목록이 : 나는 다음과 같은 정적 자원을 설정 XAML에서
public List<Foo> FooList
{
get { return (List<Foo>)GetValue(FooListProperty); }
set { SetValue(FooListProperty, value); }
}
public static DependencyProperty FooListProperty =
DependencyProperty.Register("FooList", typeof(List<Foo>),
typeof(FooButton));
, 나는 가정을 자사의 상황에 맞는 메뉴의 밤은 이후 필요 비주얼 트리의 다음의 ResourceDictionary에
또한<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource
x:Key="FooListSource"
Source="{Binding FooList}"/>
<!-- ... -->
</ResourceDictionary>
</UserControl.Resources>
부는 상기 아이템이 실제 콘텍스트 메뉴에 표시하기 위해 필요로되는 CompositeCollection이다. UserControl CanStop 속성이 true이면 구분 기호와 중지 명령도 표시됩니다. 이러한 바인딩은 MenuItem 자체가 나타나기는하지만 실패합니다. 그래서 왜 이것이 실패 하는지를 알 수 있다면 List가 더 쉬울 수도 있습니다.
<CompositeCollection x:Key="FooListItems">
<CollectionContainer
Collection="{Binding Source={StaticResource FooListSource}}"/>
<Separator
Visibility="{Binding CanStop,
Converter={StaticResource VisibleIfTrue}}" />
<MenuItem
Command="{x:Static Buttons:FooButton.Stop}"
Header="Stop"
Visibility="{Binding CanStop,
Converter={StaticResource VisibleIfTrue}}"/>
</CompositeCollection>
그리고
마지막으로 또한 ResourceDictionary의 상황에 맞는 메뉴 자체 :<ContextMenu
x:Key="FooButtonMenu"
ItemsSource="{Binding Source={StaticResource FooListItems}}"
ItemTemplate="{StaticResource FooListTemplate}"
<ContextMenu.CommandBindings>
<CommandBinding
Command="{x:Static Buttons:FooButton.Stop}"
Executed="Stop_Executed" />
</ContextMenu.CommandBindings>
</ContextMenu>
내가 많은 코드하지만이 작품은 어떤 간단하게 만들 수 있습니다 임 확실하지에 임 게시 방법을 느낍니다. 구분 기호와 하드 코드 된 메뉴 항목 만 나타납니다. 그래서 무언가가 바인딩으로 엉망이되어야합니다. 바인딩은 일반적으로 어려운 일이 아니지만 지금은 정말 내가 잃어버린 느낌이 같은 나무의 일부가 아닌 그 무언가를 묶고 싶습니다.
모든 의견을 환영합니다. :)
어떻게 FooList DependencyProperty를 사용하고 있습니까? 특히, 완전히 채워진 목록을 속성에 할당 했습니까? 아니면 빈 목록을 속성에 할당하고 나중에 목록을 채우고 있습니까? DependencyProperty는 완전히 새로운 목록에 할당을 전파하지만 목록의 변경 사항을 모니터링하려면 ObservableCollection 또는 INotifyCollectionChanged의 다른 구현을 사용해야합니다. –
레거시 시스템에서 읽을 데이터를 트리거하는 함수가 호출되며,'FooList를 수행하는 데이터를 순환합니다.추가 (myNewFoo);'. 'List <>'를 ObservableCollection <>으로 바꿔야한다는 말입니까? – Mizipzor
어 .. 모든게 나에게 좋아 보인다! 데모 프로젝트를 어딘가에 업로드 할 수 있습니까? DataContext가 누락 되었습니까? – mg007