【问题标题】:WPF Control binding sequenceWPF 控件绑定序列
【发布时间】:2019-11-07 15:41:31
【问题描述】:

我正在编写自己的 WPF 控件。

在我的控件代码中,如何指定依赖属性绑定的顺序/优先级?

    <listselector:ChListSelector 
                Grid.Row="3" 
                SelectableGridLabelText="My Label"
                SelectedGridLabelText="My Other Label"
                SelectableItems="{Binding Path=SelectableItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                SelectedItems="{Binding Path=SelectedItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                SelectableGridColumns="{Binding Path=SelectableGridColumns, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                SelectedGridColumns="{Binding Path=SelectedGridColumns, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                />

我需要确保在两个“项目”属性之前绑定两个“GridColumns”属性(因为 GridColumns 属性定义了我的控件上的几个网格如何显示项目)

【问题讨论】:

  • 我不确定尝试控制序列是一种好方法,并且偏离了 WPF 控件工作方式的一般模式。您是否考虑过对其进行设计,以便控件可以独立地对每个依赖项属性的更改做出反应。

标签: c# wpf data-binding wpf-controls


【解决方案1】:

您并不想指定绑定到依赖属性的顺序。而且我不认为有任何方法可以明确地做到这一点。

您应该检查依赖属性的 PropertyChanged 回调中的其他属性值,然后根据它们的状态执行操作。

例如:设置项目属性时,请在更新控件的其余部分之前检查以确保网格属性不为空(或使用标志设置)。如果它们为空,则不要执行任何操作。随后,当设置网格属性时,您可以更新控件的其余部分。 (您还需要检查其中不为空的项目。)

或者为了简化它,只需为控件设置一个 Setup() 方法,该方法在执行前检查所有必需的属性,并在每次设置属性时调用它。

【讨论】:

  • 感觉绑定是按照它们在 Xaml 中声明的顺序发生的,除了直接字符串分配(当它们在序列中更靠后时)发生在列表更高的绑定之前(可能是异步时间事情?)除非这一切都是随机的......
猜你喜欢
  • 1970-01-01
  • 2015-06-03
  • 2011-07-26
  • 2011-08-17
  • 1970-01-01
  • 2013-06-06
  • 2011-01-06
  • 1970-01-01
相关资源
最近更新 更多