c# - 额外属性不刷新
问题描述
我制作了一个自定义按钮,因为我希望能够独立地为内容设置不同的字符串。然后ControlTemplate
,我在我的 xaml 中创建了一个,以指定应如何呈现这两个内容。内容绑定到选定项目的子属性(来自列表视图)。如果选择发生更改,我将使用INotifyPropertyChanged
它来通知视图。然后我的按钮的内容和子内容,应该相应地改变。
现在这适用于内容。但子内容仅在程序首次加载时显示任何内容。在第一次更改选择后,它变为空白,并保持空白。
我错过了什么吗?我还有什么需要补充的吗?
自定义按钮 C#
public class DoubleContentButton : Button
{
static DoubleContentButton() { }
public object SubContent
{
get => GetValue(SubContentProperty);
set => SetValue(SubContentProperty, value);
}
public static readonly DependencyProperty SubContentProperty =
DependencyProperty.Register(name: "SubContent", typeof(object), typeof(DoubleContentButton), new UIPropertyMetadata());
}
自定义按钮控件模板
<Style x:Key="StatusButton" TargetType="{x:Type custom:DoubleContentButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type custom:DoubleContentButton}">
<StackPanel Margin="0 0 0 20">
<!-- This updates -->
<TextBlock Text="{TemplateBinding Content}"/>
<!-- This does not update -->
<TextBlock Text="{TemplateBinding SubContent}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
按钮的实现
<custom:DoubleContentButton
Command="{Binding MyCommand}"
Content="{Binding SelectedItem.Status}"
SubContent="{Binding SelectedItem.SubStatus}"
Style="{StaticResource StatusButton}" />
解决方案
您能否检查您的 SubStatus 属性是否在“SubStatus”的设置器上引发了 PropertyChangedEventHandler,或者如果有,是否正确引发?
像这样:
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyRaised(string propertyname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
}
public string SubStatus
{
get { ... }
set
{
_SubStatus = value;
OnPropertyRaised(nameof(SubStatus));
}
}
推荐阅读
- javascript - 图像数组存储
- windows - 从更改的目录中复制文件和文件夹
- javascript - 从指定文件夹中的每个文件导入默认值
- reactjs - 为下拉过滤器去抖动或限制用户输入 onKeyUp
- asp.net-core - 没有http上下文的asp net core auth。(智威汤逊)
- r - Stargazer:如何为字符串变量生成频率/汇总表
- jekyll - 管理文件夹中的 Jekyll 页面(在 github-pages 上)
- php - 开始使用 PhpStorm
- java - MapDB:如何删除 HashMap?
- javascript - 更新 chartjs 和 angular 中的图表