您好,提前感谢您的帮助。我在将数据绑定与具有我希望在列表框中显示的属性的对象列表一起使用时遇到问题。
我的 Silverlight 子窗口中有一个列表框,其 xaml 如下所示:
<StackPanel Orientation="Vertical" Width="235">
<sdk:Label Content="Servers" HorizontalAlignment="Center"></sdk:Label>
<!--new group servers list box-->
<ListBox x:Name="NewGroupServersLB" Height="150" Width="200" ItemsSource="{Binding}" SelectionChanged="NewGroupServersLB_SelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ServerName}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
我正在使用带有此代码的 Binding 对象实例在后面的代码中设置其 DataContext:
/*create new binding source object */
Binding serversBinding = new Binding();
/*set data source */
serversBinding.Source = childServersList;
/*set the data source for the new group servers listbox*/
NewGroupServersLB.DataContext = serversBinding;
我可以通过调试看到 Binding 对象的源有两个成员,并且它们是来自我的 childServersList 的适当服务器对象实例。但是,当我运行它时,列表框中没有任何内容。但是,当我在后面的代码中将列表框的数据上下文直接设置为服务器列表时,服务器名称会显示在列表框中。你能告诉我这是为什么还是我做错了什么?我尝试使用 Binding 对象的原因是因为我想用第一个列表框中所选服务器对象的子成员填充另一个列表框。提前感谢您的帮助,对于这个问题的冗长,我深表歉意。
如果有帮助,我存储在列表中的服务器对象如下所示:
[XmlRoot("Server")]
public class RegisterServerObject
{
public RegisterServerObject() { }
[XmlElement("ServerID")]
[Browsable(false)]//not displayed in grids
[EditorBrowsable(EditorBrowsableState.Never)]//not displayed by intellisense
public string ServerIDString
{
set
{
ServerID = Convert.ToInt32(value);//convert the value passed in by xml to your type
}
get
{
return Convert.ToString(ServerID);
}
}
[XmlIgnore]
public int ServerID { get; set; }
[XmlElement("GroupID")]
public string GroupIDString
{
get
{
return this.GroupID.ToString();
}
set
{
if (string.IsNullOrEmpty(value))
{
this.GroupID = 0;
}
else
{
this.GroupID = int.Parse(value);
}
}
}
[XmlIgnore]
public int GroupID { get; set; }
[XmlElement("ParentID")]
public int ParentID { get; set; }
[XmlElement("ServerName")]
public string ServerName { get; set; }
[XmlElement("User")]
public string User { get; set; }
[XmlElement("UID")]
public int Uid { get; set; }
[XmlElement("PWD")]
public string Domain { get; set; }
[XmlElement("Location")]
public string Location { get; set; }
[XmlArray(ElementName = "AssociatedModules")]
[XmlArrayItem(ElementName = "Module")]
public List<RegisterModuleObject> AssociatedModules { get; set; }