gpt4 book ai didi

silverlight - 如何通过ID获取Silverlight TreeViewItem?

转载 作者:行者123 更新时间:2023-12-03 10:47:21 24 4
gpt4 key购买 nike

我有一个Silverlight树 View ,该树 View 动态填充有treeviewitems(代表 View )。我的工作正常,但是当我单击Treeviewitem时说“ View 2.01”时,我希望能够获得ItemId(用于View 2.01)并在ViewSwitchingRegion中显示View 2.01,或者只是通过ItemId查看开关。
这就是我所做的。我想念什么?

<UserControl.Resources>
<sdk:HierarchicalDataTemplate x:Key="childNodeDataTemplate"
ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Path=Header}"/>
</sdk:HierarchicalDataTemplate>
</UserControl.Resources>

<sdk:TreeView Name="DataTreeView"
ItemsSource="{Binding DataItems}"
ItemTemplate="{StaticResource childNodeDataTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding Path=ShowViewCommand}"
CommandParameter="{Binding ElementName=DataTreeView}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=ShowViewCommand}"
CommandParameter="{Binding ElementName=DataTreeView}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</sdk:TreeView>
</UserControl>

public class DataViewModel : ViewModelBase
{
#region Fields

private readonly IRegionManager _regionManager;
...

#endregion

#region .Ctors

public DataViewModel()
{
//IRegionManager regionManager, ...

_regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();

//SomeMethodToLoadDataItems();
}

#endregion

#region Methods

ObservableCollection<DataItem> _dataItems;
public ObservableCollection<DataItem> DataItems
{
get { return _dataItems; }
set
{
if (_dataItems != value)
{
_dataItems = value;

RaisePropertyChanged("DataItems");
}
}
}

RelayCommand _showViewCommand;
public ICommand ShowViewCommand
{
get
{
if (_showViewCommand == null)
{
_showViewCommand = new RelayCommand
(
p => ShowView(p)
);
}
return _showViewCommand;
}
}

private void ShowView(object param)
{
if (param != null && param == ItemId) //ItemId for View 2.01
{
_regionManager.RequestNavigate("ViewSwitchingRegion", new Uri("View 2.01", UriKind.Relative));
}
}
}

public class DataItem : ViewModelBase
{
public DataItem()
{
this.Children = new ObservableCollection<DataItem>();
}

private string header;
public string Header
{
get {return this.header;}
set
{
if (this.header != value)
{
this.header = value;
OnPropertyChanged("Header");
}
}
}

private DataItem _itemId;
public DataItem ItemId
{
get { return _itemId; }
set
{
if (value != _itemId)
{
_itemId = value;
RaisePropertyChanged("ItemId");
}
}
}
public ObservableCollection<DataItem> Children { get; set; }
}
}

最佳答案

我终于解决了。我将对象参数更改为TreeView参数,如下所示

`

private void ShowView(TreeView param)
{
if (param.SelectedItem != null) //ItemId for View 2.01
{
var itemId = ((DataItem)param.SelectedItem).ItemId;
//should be able to manipulate the rest of the bits with the itemId
}
}

Make changes to the ShowViewCommand such that the ShowView param is cast to TreeView
Public ICommand ShowViewCommand
{
get
{
if (_showViewCommand == null)
{
_showViewCommand = new RelayCommand
(
p => ShowView(p as TreeView)
);
}
return _showViewCommand;
}
}

关于silverlight - 如何通过ID获取Silverlight TreeViewItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com