Silverlight:数据绑定:在集合的行中使用依赖属性

发布于 2024-11-09 22:23:08 字数 1648 浏览 2 评论 0原文

我有一个集合及其结构:

 public class FunctionListBindStructure : AttributeBase
{
    public FunctionListBindStructure() : base(true) {  }

    //this represents one row of the collection
    public MyFunction Function { get; set; }
    public string Name { get; set; }

}

public class FunctionListBind : AttributeListBase
{
    //this represents 
    public ObservableCollection<FunctionListBindStructure> FunctionList { get; set; }

    public FunctionListBind()
        : base(true)
    {
        FunctionList = new ObservableCollection<FunctionListBindStructure>();
    }

    public override IList GetList()
    {
        return FunctionList as IList;
    }
}

此类使用一个框架,该框架为 CLR 属性 Function.DisplayName 生成一个依赖属性作为“FunctionDisplayNameProperty”。

在我的示例视图中,我将此集合绑定到 ListBox

ListBox ItemsSource="{Binding MyModel.FunctionListBind.FunctionList}" Height="52" HorizontalAlignment="Left" Margin="136,157,0,0" Name="listBox1" VerticalAlignment="Top" Width="130" >
        <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                    <TextBlock Text="{Binding FunctionDisplayNameProperty,  Mode=TwoWay}"/>
            </StackPanel>
        </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

现在的问题是,列表中仅显示集合的最后一项...前面的项仅用空格呈现;尽管我非常确定(通过调试器)前一行的依赖属性(当它们注册及其值设置时)应具有非初始值。如果我直接引用相应的 CLR 属性 (Function.DisplayName),一切正常。

我的问题:我在这里犯了设计错误吗?依赖属性不应该用作行类型吗?我对非集合使用相同的模式,并且它有效。这也是我想对集合使用相同方法的原因(我可以使用 90% 的现有代码行来生成和设置依赖属性)。

感谢您提供有关如何(如果不是设计错误)调试依赖属性绑定的任何提示。

I have an collection + its structure:

 public class FunctionListBindStructure : AttributeBase
{
    public FunctionListBindStructure() : base(true) {  }

    //this represents one row of the collection
    public MyFunction Function { get; set; }
    public string Name { get; set; }

}

public class FunctionListBind : AttributeListBase
{
    //this represents 
    public ObservableCollection<FunctionListBindStructure> FunctionList { get; set; }

    public FunctionListBind()
        : base(true)
    {
        FunctionList = new ObservableCollection<FunctionListBindStructure>();
    }

    public override IList GetList()
    {
        return FunctionList as IList;
    }
}

This class makes usage of a framework, which generates a Dependency Property for the CLR property Function.DisplayName as "FunctionDisplayNameProperty".

In my example view I bind this collection to a ListBox

ListBox ItemsSource="{Binding MyModel.FunctionListBind.FunctionList}" Height="52" HorizontalAlignment="Left" Margin="136,157,0,0" Name="listBox1" VerticalAlignment="Top" Width="130" >
        <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                    <TextBlock Text="{Binding FunctionDisplayNameProperty,  Mode=TwoWay}"/>
            </StackPanel>
        </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

The problem is now that only the last item of the collection is displayed in the list...the previous items are rendered only with space; although I am pretty sure (via debugger) that the dependendy properties (when they registered and their value set) of the previous rows shall have non-initial values. If I refer directly to the corresponding CLR property (Function.DisplayName) all works fine.

My question: Do I make here a design error? Are Dependency Properties not supposed to be used as a row type? I use the same pattern for non-collection and there it works. This is also the reason why I want to use the same approach for collections (I can use 90% of the exisitng codeline to generate and set the Dependeny Properties).

Thanks for any hints also how (if not a design error) to debug the Dependency Property binding.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枕花眠 2024-11-16 22:23:08

这只是我的框架编码的一个错误。我已将依赖属性定义为实例属性,而不是静态属性。现在一切正常。

It was just a bug of my framework coding. I have defined the dependency properties as an instance attribute, instead of a static one. Now all works fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文