WPF绑定:如何在UserControl XAML中设置绑定源
本文关键字:绑定 XAML UserControl 设置 WPF | 更新日期: 2023-09-27 18:05:53
我想设置UserControl的属性如下。我怎样才能做到这一点呢?
<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));
}
}
}
XAML
<HierarchicalDataTemplate DataType="{x:Type src:Class}">
<!-- Upper case ClassInstance -->
<UserControls:ClassBlock ClassInstance="{Binding PropertyFromClass}" />
</HierarchicalDataTemplate>
这将解决这个问题,虽然真的应该在您的View Model
。查看MVVM模式文档可以获得帮助。