需要了解在评估绑定时n的方式

时间:2010-10-25 16:26:16

标签: wpf

我有一个从现有WPF组合框派生的自定义组合框控件。这个自定义组合有一个名为AssociatedEnum的DP,一旦设置它就会评估enum menbers并将它们添加到Items集合中。 但是,所有这些枚举可用值都是在Combo的加载事件中完成的 假设在控件加载事件期间,依赖关系道具上的所有绑定都将被设置并评估为其初始值,这是否合理。

我对此并不十分肯定,因为我已经看到了一些在加载后事件中评估Binding的实例,这违背了在加载事件中编写选择的全部目的。 我的问题应该继续并为此依赖属性实现属性更改处理程序??

此致 v703218

4 个答案:

答案 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 /逻辑树中的位置