我想像下面那样设置UserControl的Property。我该如何实现?
<HierarchicalDataTemplate DataType="{x:Type src:Class}">
<UserControls:ClassBlock classInstance="{Binding PropertyFromClass}"/>
</HierarchicalDataTemplate>
您需要设置用户控件的DataContext。当前,它不知道从哪里获取PropertyFromClass。您可以这样做:
<HierarchicalDataTemplate DataType="{x:Type src:Class}">
<UserControls:ClassBlock classInstance="{Binding PropertyFromClass}">
<UserControls:ClassBlock.DataContext>
<MyViewModels:SomeViewModelHavingPropertyFromClass />
</UserControls:ClassBlock.DataContext>
</UserControls:ClassBlock
</HierarchicalDataTemplate>
如果您的属性是代码隐藏ClassBlock.Xaml.cs
文件中的一个属性(听起来可能是这样),则必须INotifyPropertyChanged
在该属性上实现接口。
public partial class ClassBlock: UserControl, INotifyPropertyChanged
{
private string classInstance;
public ClassBlock()
{
this.InitializeComponent();
}
public string ClassInstance
{
get
{
return this.classInstance;
}
set
{
this.classInstance= value;
this.OnPropertyChanged();
}
}
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
if (this.PropertyChanged != null)
{
// Invoke the event handlers attached by other objects.
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
<HierarchicalDataTemplate DataType="{x:Type src:Class}">
<!-- Upper case ClassInstance -->
<UserControls:ClassBlock ClassInstance="{Binding PropertyFromClass}" />
</HierarchicalDataTemplate>
这将解决问题,尽管那确实应该在您的中View Model
。查看MVVM Pattern文档以寻求帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句