WPF에서는 요소 격자를 정의했습니다. 그들은 ViewModel
의 배열에있는 객체의 속성에 따라 표시되거나 축소됩니다. XAML 파일에서 약간 다른 DataTemplate 요소를 재사용하는 방법은 무엇입니까?
DataTemplate
은 다음과 같습니다
<DataTemplate DataType="{x:Type implementationInputDevices:InputDevicesViewModel}">
<Grid Grid.Row="1" Grid.Column="0">
...
<TextBlock Grid.Row="1"
Grid.Column="0"
Text="{Binding MyArray[0].Name}"
Visibility="{Binding MyArray[0].Visible}"/>
<ComboBox Grid.Row="1"
Grid.Column="1"
Visibility="{Binding MyArray[0].Visible}"
SelectedItem="{Binding MyArray[0].Foo}"
ItemsSource="{Binding Bar}"/>
<TextBlock Grid.Row="2"
Grid.Column="0"
Text="{Binding MyArray[1].Name}"
Visibility="{Binding MyArray[1].Visible}"/>
<ComboBox Grid.Row="2"
Grid.Column="1"
Visibility="{Binding MyArray[1].Visible}"
SelectedItem="{Binding MyArray[1].Foo}"
ItemsSource="{Binding Bar}"/>
...
<TextBlock Grid.Row="n"
Grid.Column="0"
Text="{Binding MyArray[n-1].Name}"
Visibility="{Binding MyArray[n-1].Visible}"/>
<ComboBox Grid.Row="n"
Grid.Column="1"
Visibility="{Binding MyArray[n-1].Visible}"
SelectedItem="{Binding MyArray[n-1].Foo}"
ItemsSource="{Binding Bar}"/>
</Grid>
</DataTemplate>
당신이 볼 수 있듯이, 나는 모든 행 요소의 동일한 블록을 사용하지만, 약간 다른 값으로하고있다. 새 행을 추가하려면 수동 조정이 필요하고 위의 행을 추가하는 것이 (이 그리드 내부에) 훨씬 더 필요하므로 이는 매우 불편합니다.
요소 집합을 한 번 정의한 다음 간단한 명령으로 다시 사용할 수 있습니까? 이런 식으로 뭔가 :
<MyRowElement n="1" />
<MyRowElement n="2" />
...
<MyRowElement n="k" />
에 중첩 같은 UserControl을,이다 예를 봐 관찰 가능한 수집? MyArray [index] .property에 바인딩하는 대신, 각 항목이 텍스트 블록과 콤보 박스로 구성되도록 지정하는 목록 상자와 같은 컨트롤에 바인딩되는 관찰 가능한 개체 컬렉션을 만듭니다. 데이터 템플릿 선택기로 원하는 것을 얻을 수 있지만 솔직히이 접근법은 나에게 매우 못생긴다 –
질문 제목에서 강제 태그를 제거했습니다. 왜 [여기] (https://stackoverflow.com/help/tagging)를 읽어 보시기 바랍니다. – dymanoid
하드 코드 된 격자 대신 'ItemsControl'을 사용해야합니다. 'ItemsPanel'으로'Grid'를 사용할 수 있습니다. [이 질문] (https://stackoverflow.com/questions/16559186/wpf-sharedgridsize-group-with-itemscontrol-embedded-grids)으로 시작하십시오. – dymanoid