我有一个从现有WPF组合框派生的自定义组合框控件。这个自定义组合有一个名为AssociatedEnum的DP,一旦设置它就会评估enum menbers并将它们添加到Items集合中。 但是,所有这些枚举可用值都是在Combo的加载事件中完成的 假设在控件加载事件期间,依赖关系道具上的所有绑定都将被设置并评估为其初始值,这是否合理。
我对此并不十分肯定,因为我已经看到了一些在加载后事件中评估Binding的实例,这违背了在加载事件中编写选择的全部目的。 我的问题应该继续并为此依赖属性实现属性更改处理程序??
此致 v703218
答案 0 :(得分:0)
我的问题应该继续并为此依赖项属性实现属性更改处理程序??
在任何情况下都应该这样做。这是评估选择的更安全的方法,因为没有这个,您将无法从代码中支持被调用的更改集合。
通过在此处理它,无论设置在何处或如何设置,都可以保证捕获绑定。
答案 1 :(得分:0)
Loaded
事件继承自FrameworkElement
,因此与UI直接相关。你这样做的方式似乎有些奇怪,但可能是因为我误解了细节。
如果您只想为用户预先填充ComboBox
数据,可以通过简单地绑定到标准ObservableCollection<T>
,然后设置ComboBox Style/Template以适合您的演示文稿来完成需要,更具体地说是ComboBox.ItemTemplate
,如下所示......
<ComboBox.ItemTemplate>
<DataTemplate>
<Border>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Foo}" />
<TextBlock Text="{Binding Bar}" />
</StackPanel>
</Border>
</DataTemplate>
</ComboBox.ItemTemplate>
以上是在绑定对象上使用多个项目,但是你也可以使用DisplayMemberPath我认为你可能会做更多的事情,然后你需要创建自定义ComboBox
答案 2 :(得分:0)
谢谢里德...... 这就是我们一直在争论的问题,在大多数情况下,我和我的同事已经看到所有绑定都被解决并设置为初始值(在加载它之前不是默认值或后备值...但是我遇到了这种情况,我的控件加载后正在评估绑定,因此错过了在LOAD事件中应该完成的所有事情。
让所有标准控件(MS WPF控件)正确绑定,但我的自定义控件会错过它,因为所有内容都只在加载时完成...
你有任何可以启发我们的文章吗?
答案 3 :(得分:0)
我同意你的推理,但我想知道Microsoft / WPF创建者是否保证在加载控件之前将绑定评估为其第一个值...
例如我有一个组合框
我的代码为
public CustomCombo()
{
this.Loaded + = OnLoaded; }
private void OnLoaded(Object sender,RoutedEventArgs e)
{
if(CustomDP!= null){
//在组合中填充项目
} }
在这种情况下如果在我的组合加载之前没有评估我的绑定,它将保持为空..不是吗?
有些人认为这种情况永远不会出现,而我的问题是它是否真的如此,或者绑定也可以在加载后进行评估,因为它可能依赖于Datacontext或Visual /逻辑树中的位置