将ListBox绑定到ObservableCollection时的ArgumentException

时间:2014-02-12 14:17:13

标签: c# xaml windows-phone-8

首先,我应该补充一点,我是Windows Phone开发的新手,所以对我很轻松: - )

我想将ListBox绑定到ObservableCollection< LinkElement>其中每个LinkElement由名为Tile的UserControl表示。到目前为止代码工作,我得到尽可能多的Tile:s,因为我在我的ObservableCollection中有了LinkElement:我已经简化了下面的代码,现在只有一个LinkElement)。

XAML:

        <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="10,10,10,10">
        <ScrollViewer Name="linkScrollViewer">
            <ListBox Name="linkList" Margin="26,0,26,0" Height="380" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Controls:Tile>
                            <toolkit:ContextMenuService.ContextMenu>
                                <toolkit:ContextMenu Name="ContextMenu" >
                                    <toolkit:MenuItem Name="Edit" Header="Edit" Click="EditItem_Click"/>
                                    <toolkit:MenuItem Name="Delete"  Header="Delete" Click="DeleteItem_Click"/>
                                </toolkit:ContextMenu>
                            </toolkit:ContextMenuService.ContextMenu>
                        </Controls:Tile>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>                
        </ScrollViewer>
    </Grid>

我通过代码设置绑定源:

linkList.ItemsSource = LinkProjection.List;

我绑定的集合(现在没有做太多):

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SoftTeam.SoftLink
{
 public class LinkProjection
{
    private Links _links;
    public ObservableCollection<LinkElement> List = new ObservableCollection<LinkElement>();
    public LinkProjection(Links links)
    {
        _links = links;
    }

    public void Refresh()
    {
        List.Clear(); 

        var element = new LinkElement();

        element.Name = "Button1"; 
        element.Header = "Media";
        element.Height = 200;
        element.Width = 480;
        element.IsLink = false;
        element.Tag = null;
        element.URL = "";

        List.Add(element);
    }
}

public class LinkElement
{
    public string Name;
    public string Header;
    public string URL;
    public double Height;
    public double Width;
    public bool IsLink;
    public object Tag;
}

}

问题是当我尝试将Tile控件的属性绑定到LinkElement类的属性时,我得到一个System.ArgumentException“值不在预期范围内。”。该例外没有给出任何关于问题所在的提示,因为它没有出现在我的代码中。

也就是说,当我改变

<Controls:Tile> // This works!
例如,在XAML中

<Controls:Tile TileHeader="{Binding Path=Header}"> // This crashes

<Controls:Tile Name="{Binding Path=Name}">  // This crashes too

发生异常。我绑定哪个属性并不重要,它给出了一个例外。没有属性绑定,代码工作正常。

我想我的问题是:为什么?

1 个答案:

答案 0 :(得分:0)

我终于在这篇文章中找到了答案:

Binding properties of User Control in Windows Phone Application

问题是我的UserControl在另一个项目/程序集中,因此我需要为我的控件创建Dependency Proeperties。