2011-10-11 3 views
1

중첩 된 항목이 다른 컨트롤에 대한 ElementName 바인딩을 사용하는 사용자 지정 ItemsControl을 만들려고합니다. 그러나 사용자 지정 ItemsControl의 항목에 대한 ElementName 바인딩

<ItemsControl> 
    <TextBox Text="{Binding Text, ElementName=test, UpdateSourceTrigger=PropertyChanged}"/> 
</ItemsControl> 
<TextBox x:Name="test"/> 

을 예상대로 표준 ItemsControl에 대한이 최대한 빨리

<!-- CustomItemsControl.xaml --> 
<ItemsControl x:Class="MyControl.CustomItemsControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"/> 

<!-- CustomItemsControl.xaml.cs --> 
namespace MyControl 
{ 
    public partial class CustomItemsControl 
    { 
     public CustomItemsControl() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

<!-- Window.xaml --> 
<local:CustomItemsControl> 
    <TextBox Text="{Binding Text, ElementName=test, UpdateSourceTrigger=PropertyChanged}"/> 
</local:CustomItemsControl> 
<TextBox x:Name="test"/> 

을 다음과 같이 그런 다음 ElementName을 바인딩이 더있다 ItemsControl에서 상속하는 사용자 지정 컨트롤을 사용하지 와서 같이 미세하고 바인딩 작품을 작동 더 긴 작업. 다른 사람이이 문제를보고 해결 방법을 알고 있습니까?

도움을 주시면 감사하겠습니다.

+0

CustomItemControl 코드를 게시하면 도움이 될 것입니다. –

+0

위 코드를 추가했습니다. –

답변

1

왜 CustomControl에 xaml 파일이 필요한가요? 당신은 ItemsControl-

public class CustomItemsControl : ItemsControl 
    { 

    } 

에서 상속이 같은 현지 네임 스페이스의 클래스를 만들 필요가 그리고 원하는대로 작동합니다 .. !!

+0

XAML을 사용해야하는 이유는이 컨트롤의 사용자에게 숨겨진 템플릿의 특정 레이아웃을 갖기를 원한다는 것입니다. 그러나 InitializeComponent() 제거 훌륭한 작동합니다. 그걸 제거하면 왜 고칠 수 있는지 아십니까? –

+3

InitializeComponent()는 주어진 사용자 정의 컨트롤에 대한'NameScope'를 등록하고'NameScope'를 오버라이드하면'ElementName'의 관련성을 잃어 버립니다. http://msdn.microsoft.com/en-us/library/ms746659.aspx –

관련 문제