편집 가능한 노드가있는 TreeView를 만들고 싶습니다. 나는이 생각 나는 글이 좋은 봤 :MVVM에서 선택된 TreeViewItem 가져 오기
http://www.codeproject.com/Articles/31592/Editable-TextBlock-in-WPF-for-In-place-Editing
그러나 나는 문제가있다. 내 TreeView는 dinamically 형성, arcticle에서 정적으로되지 않습니다. DocPackageExtended 목록 - 그
<TreeView Name="_packageTreeView" Margin="5" ItemsSource="{Binding PackageExtendedList}">
<TreeView.InputBindings>
<KeyBinding Key="C" Command="{Binding *TestCommand*}" CommandParameter="{Binding}" />
</TreeView.InputBindings>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding PackageTreeItemChangeCommand}" CommandParameter="{Binding ElementName=_packageTreeView, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type MasterBuisnessLogic:RootDocPackage}" ItemsSource="{Binding Path=Childs}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition>
</ColumnDefinition>
<ColumnDefinition>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Source="/Resources/DocGroup.png"></Image>
<Etb:EditableTextBlock Margin="5,0,0,0" Grid.Column="1" Text="{Binding Path=Name}"></Etb:EditableTextBlock>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
PackageExtendedList처럼.
첫 번째 질문 - 어떻게하면 TestCommand에서 TreeViewItem 인스턴스를 얻을 수 있습니까? 인스턴스가 아닙니다 DocPackageExtended 클래스! 선택한 인스턴스를 얻으려면 TreeViewItem 기사 에서처럼.
그리고 두 번째 질문
- 나는 예를 TreeViewItem를 얻을 후에는 어떻게 트 리뷰 항목의 DataTemplate을에서 EditableTextBlock를 얻을 수 있습니다.추가 된 대답은
나는 이미 그것을 시도. MVVM 뷰 모델의 원인은 링크, 그
private void TreeViewItemSelected(object sender, RoutedEventArgs e)
{
// Already have TreeViewItem instance without of ItemContainerGenerator help
var tvi = e.OriginalSource as TreeViewItem;
if (tvi == null)
return;
var etb = VisualTreeLib.VisualTreeLib.GetVisualChild<EditableTextBlock>(tvi);
if (etb == null)
return;
// Do what I want
etb.IsEditable = true;
}
불행하게도,이 더 어떤 :(
나는 또한 접근을 시도 영향을주지 않습니다처럼 나는, 코드 숨김에서 핸들러를 만들어, 트 리뷰와 같은 개체를 보는 한 수 없습니다 뿐만 아니라 실패
을 DocPackageExtended 유형에 내가 XAML의 변화보다 재산
public bool IsEditable
{
get { return _isEditable; }
set
{
_isEditable = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsEditable"));
}
}
을 정의합니다.
,536<Etb:EditableTextBlock Margin="5,0,0,0" Grid.Column="1" Text="{Binding Path=Name}" *IsEditable="{Binding Path=IsEditable}"*/>
너무 :( 어떤 아이디어를 작동하지 않습니다
private void TestCommandMethod(object obj)
{
var dpe = obj as DocPackageExtended;
if (dpe == null)
return;
dpe.IsEditable = true;
}
뷰 모델
에서?
첫 번째 게시물에 대한 답변을 추가하여 형식 코드로 볼 수 있습니다. 텍스트에서 회색 배경을 만드는 방법은 무엇입니까? 찾을 수 없습니다. – monstr
TestCommand의 CommandParameter가'ViewModel' 자체이고'DocPackageExtended' 인스턴스가 아니라고 가정하므로 대화는 항상 null을 반환합니다. 그게 사실이라면 제 편집을보세요. –
CommandParameter에 디버거에서 올바른 형식의 개체 (DocPackageExtended)가 선택되어 있습니다. 다중 선택이 허용되지 않습니다. – monstr