【发布时间】:2014-02-12 14:17:12
【问题描述】:
首先我要补充一点,我是 Windows Phone 开发的新手,所以请放轻松 :-)
我想将一个 ListBox 绑定到一个 ObservableCollection
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
出现异常。我绑定到哪个属性都没有关系,它会给出一个异常。如果没有绑定属性,代码可以正常工作。
我想我的问题是:为什么?
【问题讨论】:
-
我认为您应该在实现
INotifyPropertyChanged接口的模型类中使用这些属性。然后,您可以将这些属性绑定到 XAML 控件。检查此链接以获取更多信息link -
我将 INotifyPropertyChanged 添加到 LinkElement 类并按照您发送的链接实现它,但现在我收到 NullReferenceException:在 System.Windows 中发生“System.NullReferenceException”类型的第一次机会异常.ni.dll 附加信息:对象引用未设置为对象的实例。
-
我现在正在调查,不确定这是否与我原来的问题有关...
-
不,那是另一个问题,这意味着主要问题仍然存在......
-
好的,另一个更新。 INotifyPropertyChanged 确实有效,但到目前为止仅适用于数字属性(在我的情况下为双属性)。它仍然在字符串和布尔属性上失败......
标签: c# xaml windows-phone-8