如何将属性/属性添加到没有代码隐藏的用户控件
本文关键字:属性 隐藏 代码 用户 控件 添加 | 更新日期: 2023-09-27 18:32:53
首先,是否可以在没有代码的情况下将属性添加到 WPF 用户控件?
如果没有,假设我有一个自定义用户控件,如下所示:
<UserControl x:Class="Example.Views.View"
xmlns:vm ="clr-Example.ViewModels"
xmlns:view ="clr-Example.Views"
... >
<UserControl.DataContext>
<vm:ViewModel/>
</UserControl.DataContext>
<Button Background="Transparent" Command="{Binding ClickAction}">
<Grid>
...
<Label Content="{Binding Description}"/>
</Grid>
</Button>
</UserControl>
像这样的视图模型
public class ViewModel : INotifyPropertyChanged
{
private ICommand _clickAction;
public ICommand ClickAction
{
get { return _clickAction; }
set
{
if (_clickAction != value)
{
_clickAction = value;
RaisePropertyChanged("ClickAction");
};
}
}
private int _description;
public int Description
{
get { return _description; }
set
{
if (_description!= value)
{
_description = value;
RaisePropertyChanged("Description");
};
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
// take a copy to prevent thread issues
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我希望能够像这样设置操作:
...
<UserControl.Resources>
<ResourceDictionary>
<command:ButtonGotClicked x:Key="gotClicked" />
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<view:FuelDispenserView ClickAction="{StaticResource gotClicked}"/>
</Grid> ...
没有代码后面。
目前我使用这个丑陋的代码来实现我的目标,但我不喜欢它。
public partial class View : UserControl
{
public View()
{
InitializeComponent();
}
public ICommand ClickAction {
get {
return ((ViewModel)(this.DataContext)).ClickAction;
}
set {
((ViewModel)(this.DataContext)).ClickAction = value;
}
}
}
有人有更好的想法如何做到这一点吗?
附言这不仅仅适用于此操作。我需要添加不同的属性。
可以使用附加属性逻辑向用户控件添加自定义属性,但看起来您必须在不同的视图中为 ClickAction 定义不同的行为,因此我不确定它对您是否有用。我建议您使用路由命令和命令绑定 - 在这种情况下可能会有所帮助。