이것을 상상해보십시오 : 같은 메뉴 인 컨텍스트 메뉴를 갖고 싶은 컨트롤이 여러 개 있습니다. 해당 컨텍스트 메뉴는 동적이며 언제든지 변경 될 수 있습니다. 그래서이 같은 정적 클래스를 만들 :동일한 동적 컨텍스트 메뉴를 동적 인 사용자 컨트롤 수에 바인딩하는 방법은 무엇입니까?
public static class EmployeeContextMenu
{
private static ContextMenu EmployeeMenu { get; set; }
static EmployeeContextMenu()
{
EmployeeMenu = new ContextMenu();
}
public static ContextMenu Get()
{
return EmployeeMenu;
}
public static void Set(List<String> employees)
{
EmployeeMenu = new ContextMenu();
MenuItem mi;
foreach (var item in employees)
{
mi = new MenuItem();
mi.Header = item;
EmployeeMenu.Items.Add(mi);
}
}
}
을 그리고 어떤 시점에서 당신이 메뉴 항목을 변경하고 위의 설정 방법을 사용할 필요가 완벽하게 잘 작동합니다. 어떻게 든 컨트롤 컨텍스트 메뉴를 Get 메서드에 바인딩하려고합니다. 처럼 달성 될 수 있습니다
<Window.Resources>
<ObjectDataProvider ObjectType="{x:Type local:EmployeeContextMenu}" MethodName="Get" x:Key="myCM" />
</Window.Resources>
<Grid>
<TextBlock Name="tb" ContextMenu="{Binding Source={StaticResource myCM}}" />
</Grid>
물론 당신은 컨트롤의 상황에 맞는 메뉴가 곧 정적 설정 메소드가 호출 될 때 업데이트 할.
하지만 위의 내용은 기본적으로 바인딩에 문제가있는 것입니다 ... 컨텍스트 메뉴가 전혀 표시되지 않습니다. 그러면 바인딩을 어떻게 설정 하시겠습니까? Datacontext, 데이터 소스? 어디서 어떻게?
당신이
tb.ContextMenu = EmployeeContextMenu.Get();
을 구현하지만 당신은 당신이 심하게 될 것입니다 언급 한 상황에 맞는 메뉴를 갖고 싶어 동적으로 생성 된 사용자 컨트롤의 알 수없는 번호가있는 경우 그 나쁜 솔루션이 될 것입니다 경우는 물론 작업의 것 즉시 업데이 트되었습니다. 당신이 할 수있는 일
바인딩이 정상적으로 보입니다. 'EmployeeMenu'가 비어 있지 않습니까? (먼저'Set' 메소드를 통해 항목을 설정해야합니다). 또한 Binding에 문제가 있다면,'Output' 윈도우를 살펴볼 수 있습니다. 거기에 메시지가 있어야합니다. –