【发布时间】:2021-12-29 20:59:46
【问题描述】:
我有一个小型应用程序,其中有一个模型树,我希望根据双击的项目,ContentControl 中应该出现一个不同的视图。 enter image description here
我创建了一个命令来更改 ContentControl 视图,但问题是 TreeView 的 DataContext 是“TreeItemModel”,其中我有所有数据来显示树和孩子,但命令和视图处理是编程的在“MainViewModel”中,所以我无法选择命令。 enter image description here
任何人都知道我该如何处理这个问题并能够继续使用我的 TreeItemModel 而不是 MainViewModel 来处理这个命令?
XAML 代码:
<Grid Grid.Row="3" Background="#FFF0F0F0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30*" MaxWidth="350"/>
<ColumnDefinition Width="70*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Margin="5">
<TreeView x:Name ="TreeModel" ItemsSource="{Binding MainTree}" PreviewMouseDoubleClick="TreeView_PreviewMouseDoubleClick">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type model:TreeItemModel}" ItemsSource="{Binding Path=Elements}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.25*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="{Binding Path=Icon}" MaxHeight="30" MaxWidth="30" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="1" Text="{Binding Path=Name}" Margin="5,0,0,0" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="commandBehaviors:MouseDoubleClick.Command" Value="{Binding DoubleClickCmd}"/>
<Setter Property="commandBehaviors:MouseDoubleClick.CommandParameter" Value="{Binding}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</StackPanel>
<ContentControl Grid.Column="1"
Margin="10"
Content="{Binding CurrentView}"/>
</Grid>
MainViewModel 代码:
class MainViewModel
{
// Command when double clicking in tree item
public RelayCommand DoubleClickCmd { get; set; }
string ObjPath;
public List<TreeItemModel> MainTree { get; set; }
public TreeItemModel MainObject { get; set; }
public VariablesViewModel VariableVM { get; set; }
private object _currentView;
public object CurrentView
{
get { return _currentView; }
set
{
_currentView = value;
OnPropertyChanged();
}
}
public MainViewModel()
{
VariableVM = new VariablesViewModel();
// Command that i want ot execute
DoubleClickCmd = new RelayCommand(o =>
{
CurrentView = VariableVM;
});
}
}
【问题讨论】:
标签: c# wpf mvvm treeview datacontext