c# - 嵌套用户控件中的 WPF 排序数据绑定
问题描述
我有两个用户控件:“标志”和“标志选项”。'FlagOption' 嵌套在 'Flags' 控件中的 ItemsControl 中,如下所示:
标志控制:
<ItemsControl ItemsSource="Binding RelativeSource={RelativeSource AncestorType=local:Flags}, Path=FlagOptions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:FlagOption FlagValue="{Binding}" Field="{Binding RelativeSource={RelativeSource AncestorType=local:Flags}, Path=Field}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
代码隐藏:
public static readonly DependencyProperty FieldProperty = DependencyProperty.Register(nameof(Field), typeof(TagInterface.LongFlags), typeof(Flags));
public TagInterface.LongFlags Field
{
get { return (TagInterface.LongFlags)GetValue(FieldProperty); }
set { SetValue(FieldProperty, value); }
}
public IEnumerable<Enum> FlagOptions
{
get
{
return Enum.GetValues(Field.FieldValue.GetType()).Cast<Enum>();
}
}
标志选项控制:
<CheckBox FlowDirection="LeftToRight" IsChecked="{Binding Path=IsChecked, RelativeSource={RelativeSource AncestorType=local:FlagOption}}"/>
代码隐藏:
public static readonly DependencyProperty FlagValueProperty = DependencyProperty.Register(nameof(FlagValue), typeof(Enum), typeof(FlagOption));
public static readonly DependencyProperty FieldProperty = DependencyProperty.Register(nameof(Field), typeof(TagInterface.LongFlags), typeof(FlagOption));
public Enum FlagValue
{
get { return (Enum)GetValue(FlagValueProperty); }
set { SetValue(FlagValueProperty, value); }
}
public TagInterface.LongFlags Field
{
get { return (TagInterface.LongFlags)GetValue(FieldProperty); }
set { SetValue(FieldProperty, value); }
}
public bool IsChecked
{
get
{
// Accessing Field Property here is null because it is bound AFTER IsChecked field
return false;
}
set
{
// TODO
}
}
我遇到的问题是,在 FlagOption 控件中,“字段”依赖属性在 IsChecked 属性之后被绑定,因此字段属性在 IsChecked 属性的 Getter 中为空。如果调试并跳过错误,“字段”依赖属性最终会被绑定,但为时已晚。
我可以以某种方式控制绑定的顺序吗?为什么我的 IsChecked 属性之前没有绑定字段依赖属性?
解决方案
推荐阅读
- javascript - vue过渡组件在动画期间消失
- apache-spark - Spark窗口函数过滤不符合要求的行
- python - 为什么我得到“浮动”对象是不可分割的
- java - 使用 java 在 FusionAuth 中创建租户
- python - 在 attrs 类中为 init 参数添加类型提示
- postgresql - 如何在两个表的最小和最大时间戳之间生成系列(Postgresql)
- javascript - 服务器指向我的 c:/ 目录而不是消息
- firefox-addon - 从 firefox webextension 插入内容
- keras - backend.set_image_data_format('th') 返回意外错误
- python - Qt5 mouseEntered / mouseExited 信号?