3
내 xml을 TreeView에 바인딩하고 선택한 TreeViewItem을 TextBox에 바인딩합니다. 이제 두 개의 TextBox가 필요합니다. 첫 번째 항목은 TreeViewItem이 선택 될 때 활성화해야하며 항목이 "./title"범주 인 경우 TextBox- 콘텐츠의 XPath를 "@name"으로 변경해야합니다. 두 번째 항목은 선택한 항목이 카드 인 경우에만 활성화해야합니다.WPF의 XPath 바인딩 동역학 변경
wpf에서만 가능합니까? 그리고 어떻게?
트 리뷰 출력 :
o Categoryname
- something
o SubCategory
- something else
- text
XML :
<root>
<cards>
<category name="Categoryname">
<card>
<title>something</title>
<content>the content</content>
..
</card>
<category name="SubCategory">
<card>
<title>something else</title>
<content>the content</content>
...
</card>
</category>
</category>
<card>
<title>text</title>
<content>the content</content>
..
</card>
</cards>
</root>
텍스트 상자 (상황이 지금과 같이) :
<TextBox Name="textBoxTitel"
DataContext="{Binding ElementName=listViewCards, Path=SelectedItem}"
Text="{Binding XPath=./title, UpdateSourceTrigger=PropertyChanged}"
IsReadOnly="False">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=listViewCards, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
편집 :
는 두 번째이 시도 케이스를 사용할 수는 없습니다. 텍스트 상자 :
(요소 형 카드의 경우에만 텍스트 상자를 사용)
<TextBox IsEnabled="False" DataContext="{Binding ElementName=treeView, Path=SelectedItem}">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding LocalName}" Value="card">
<Setter Property="Text" Value="{Binding XPath=./question, UpdateSourceTrigger=PropertyChanged}"/>
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
는 첫 번째 경우에서 완벽하게 작동 두 번째 경우에만 요소가 형식 카드에서 경우에만 사용할 수있는 텍스트 상자가 필요합니다, 당신이 내게 어떻게 완료 표시 할 수 있습니까? 나는 datatriggers에 익숙하지 않다 :-( – jwillmer
@myName은 두 번째 텍스트 상자로 내 코드를 업데이트했다. –
완벽하게 작동한다! – jwillmer