Mvvm 如何在TreeView Silverlight 4.0中创建数据模板
我有一些复杂的需求,需要在Silverlight中为TreeView创建数据模板。这是使用MVVM设计模式。 以下是我想要的: 包装1 孩子1 孩子2 包装2 孩子3 孩子4 代码:Mvvm 如何在TreeView Silverlight 4.0中创建数据模板,mvvm,silverlight-4.0,mvvm-light,silverlight-toolkit,Mvvm,Silverlight 4.0,Mvvm Light,Silverlight Toolkit,我有一些复杂的需求,需要在Silverlight中为TreeView创建数据模板。这是使用MVVM设计模式。 以下是我想要的: 包装1 孩子1 孩子2 包装2 孩子3 孩子4 代码: 类包 { 字符串\u名称; 可观察到的收集; 公共observeCollection Childs{get{return}Childs;}set{{u Childs=value;} 公共字符串PackageName{get{return{u Name;}set{{u Name=value;}} } 班童 { 字符串
类包
{
字符串\u名称;
可观察到的收集;
公共observeCollection Childs{get{return}Childs;}set{{u Childs=value;}
公共字符串PackageName{get{return{u Name;}set{{u Name=value;}}
}
班童
{
字符串ChildName;
公共布尔值已启用{get;set;}
公共字符串Id{get;set;}
}
使用上述数据协定,我应该创建一个树状视图:
包名称为TreeItem头值。
每个子项都是一个子框,其内容为ChildName,复选框的Enabled属性绑定到子项的IsEnabled
我尝试了以下代码,但它根本没有显示任何树视图
<sdk:TreeView x:Name="SelectedPackagesTV" ItemsSource="{Binding Packages, Mode=TwoWay}"
ItemTemplate="{StaticResource PackageTemplate}">
<sdk:TreeView.Resources>
<DataTemplate x:Key="FormsTemplate" >
<CheckBox Content="{Binding Id, Mode=TwoWay}" IsEnabled="{Binding IsEnabled}" >
</CheckBox>
</DataTemplate>
<sdk:HierarchicalDataTemplate x:Key="PackageTemplate" ItemsSource="{Binding Childs, Mode=TwoWay}" ItemTemplate="{StaticResource FormsTemplate}">
<TextBlock Text="{Binding Name, Mode=TwoWay}" />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.Resources>
</sdk:TreeView>
注意:我正在视图模型构造函数中向PackageCollection填充值。这会有问题吗?
如果我遗漏了什么,请告诉我,并建议我解决问题的最佳方法
提前感谢。编辑:
“PackageTemplate”中的绑定设置为“Name”,但类的公共属性为“PackageName”
下面是创建数据并附加数据的示例。我已经测试了这个,它是有效的
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
public class Package
{
public string Name { get; set; }
public ObservableCollection<Child> Childs { get; set; }
}
public class Child
{
public string ChildName { get; set; }
public bool IsEnabled { get; set; }
}
public class ViewModel : INotifyPropertyChanged
{
private ObservableCollection<Package> _packages;
public event PropertyChangedEventHandler PropertyChanged;
public string TestStr { get { return "testing123"; } }
public ViewModel()
{
List<Package> list = new List<Package>() { new Package() { Name = "pkg1", Childs = new ObservableCollection<Child>(new List<Child>() { new Child() { ChildName = "Child1" } }) } };
this.Packages = new ObservableCollection<Package>(list);
}
public ObservableCollection<Package> Packages
{
get
{
return this._packages;
}
set
{
this._packages = value;
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
应该是:
ItemTemplate= "{StaticResource PackageTemplate}"
编辑:
“PackageTemplate”中的绑定设置为“Name”,但类的公共属性为“PackageName”
下面是创建数据并附加数据的示例。我已经测试了这个,它是有效的
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
public class Package
{
public string Name { get; set; }
public ObservableCollection<Child> Childs { get; set; }
}
public class Child
{
public string ChildName { get; set; }
public bool IsEnabled { get; set; }
}
public class ViewModel : INotifyPropertyChanged
{
private ObservableCollection<Package> _packages;
public event PropertyChangedEventHandler PropertyChanged;
public string TestStr { get { return "testing123"; } }
public ViewModel()
{
List<Package> list = new List<Package>() { new Package() { Name = "pkg1", Childs = new ObservableCollection<Child>(new List<Child>() { new Child() { ChildName = "Child1" } }) } };
this.Packages = new ObservableCollection<Package>(list);
}
public ObservableCollection<Package> Packages
{
get
{
return this._packages;
}
set
{
this._packages = value;
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
应该是:
ItemTemplate= "{StaticResource PackageTemplate}"
我们能拿到你的树吗?我们能拿到你的树吗?
ItemTemplate= {"StaticResoruce PackageTemplate"}
ItemTemplate= "{StaticResource PackageTemplate}"