문제

Itemssource가 관찰 정책에 묶인 ItemsControl이 있습니다.<구성 요소> 실행 시간에. 잘 작동하는 유형 구성 요소에 대한 데이터 템플릿을 정의했습니다.

이제 구성 요소는 관찰 정책을 가지고 있습니다<Control> 및 Component DataTemplate 내부에 다른 항목을 추가하여 모든 컨트롤을 렌더링하고 싶습니다. 여기서 제어는 WPF 컨트롤과 관련이없는 내 자신의 사용자 정의 객체입니다.

다른 유형의 컨트롤이 있으므로 각 유형에 대한 올바른 템플릿을 선택하기 위해 ItemTemplatesEcector를 사용하려고합니다. 아래의 예에서는 작게 유지하기 위해 MyControltemPlatesElector에서 findResource를 사용하여 선택한 템플릿을 사용하는 템플릿 "rwstring"중 하나만 표시했습니다. 그러나 SelectTemplate은 절대 호출되지 않습니다 (중단 점을 사용하여 확인). 내 XAML에 뭔가 잘못 되었나요?

<ItemsControl.Resources>
    <src:MyControlTemplateSelector x:Key="XSelector" />
    <DataTemplate DataType="{x:Type src:Component}"  >
        <Expander Visibility="{Binding Path=Show}">
                <ItemsControl ItemsSource="{Binding Path=Contrls}" 
                          ItemTemplateSelector="{StaticResource XSelector}">
                <ItemsControl.Resources>
                    <DataTemplate x:Key="RWstring" >
                        <TextBlock Text="{Binding Path=Label}"/>
                    </DataTemplate>
                </ItemsControl.Resources>
                <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </Expander>
    </DataTemplate>
</ItemsControl.Resources>

업데이트: Contrls는 오타가 아니라 바보 같은 이름 지정 시스템을 사용하는 것입니다. Contrls는 ObservableCollection 유형의 구성 요소의 특성입니다. 또한 ItemStemPlatesEcelector를 사용하려는 이유는 관측형 수집이 있기 때문입니다.<Control>에는 제어와 같은 일반 유형의 객체가 포함됩니다<int> 컨트롤<문자열> 등은 모두 제어에서 파생되며 분명히 일반적인 유형을 참조하는 데이터 emplate를 만들 수 없습니다.

업데이트 : 업데이트 2가 관련이 없어서 제거되었습니다. STATICRESOURCE를 DynamicResource로 변경하여 ItemTemplatesEctor가 작동하도록했습니다. 하지만 이것이 왜 작동하는지 모르겠습니다 ...

도움이 되었습니까?

해결책

자원이 STATICRESOURCES가 평가 될 때로드 타임에 생성되지 않은 ItemsControl 내부에 있기 때문에 정적 소송에서 작동하지 않는다고 생각합니다.

로드 타임에 동적 소송은로드 시간에 표현식으로 평가 한 다음 요청시 정확한 값으로 평가됩니다.

Itemscontrol 외부에서 리소스를 이동하십시오.

다른 팁

중첩 된 Itemscontrol을 바인딩하는 선에서 경로가 맞습니까? 현재 "contrls"이고 "컨트롤"이어야합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top