将Combobox SelectedValue绑定到Page数据值

时间:2011-07-06 19:26:13

标签: silverlight-4.0

BASE = C#,。Net,MVC,Silverlight 4 views

我看过对类似问题的回答,但仍然无法让它发挥作用。我想这并不像我最初想的那么简单。

我有一个ContractInfo类,其中包含一个ProjectProponent属性

. . . 
public Responsible_Person ProjectProponent { get; set; }
. . . 

类型为Responsible_Person

   . . .
   public string LASTNAME { get { return m_last; } set { m_last = value; } }
   public string USERNAME { get { return m_uname; } set { m_uname = value; } }
   public string FIRSTNAME { get { return m_first; } set { m_first = value; } }
   public string FullName { get { return m_first + " " + m_last; } }
   . . .

当SL控件加载时,它通过json从控制器获取一个AgreementInfo对象。此对象设置为LayoutRoot的DataContext。

然后,我有一个组合框,其ItemSource设置为List。目前,它是像

那样硬连线的虚拟数据
   . . .
   List<Responsible_Person> items = new List<Responsible_Person>();

   Responsible_Person newguy = new Responsible_Person();
   newguy.FIRSTNAME = "Jane"; newguy.LASTNAME = "Dough"; newguy.USERNAME = "jdough"; newguy.RP_ROLES = dummyroles;
   items.Add(newguy);
   . . . 

   cboProjectProponent.ItemsSource = items;
   cboProjectProponent.DisplayMemberPath = "FullName";

最终将从服务中获取该列表。

问题: 在XAML中我有

. . .
<TextBlock x:Name="tbktest" Text="{Binding ProjectProponent.FullName}" />
<ComboBox x:Name="cboProjectProponent" SelectedValue="{Binding ProjectProponent.FullName, Mode=TwoWay}" />
. . . 

我猜我在文本块中看到了来自AgreementInfo的正确名称,但是没有选择出现在下拉列表中的相同名称,因为我绑定了错误的东西。我想要的是组合框,其中包含List中的值和来自AgreementInfo的ProjectProponent将成为所选项目。

1 个答案:

答案 0 :(得分:0)

在绑定之前是否设置了ItemSource?如果在设置ItemSource之前发生绑定,则SelectedValue绑定将不起作用。我以前见过这些类型的计时问题。你能不能通过XAML绑定而不是代码设置ItemSource?

我注意到你也没有设置组合的SelectedValuePath属性。如果没有这个,您将尝试将Responsible_Person分配给ProjectProponent.FullName(SelectedValue)。查看本文以获取所有ComboBox控件属性的详细说明:http://johnpapa.net/binding-to-silverlight-combobox-and-using-selectedvalue-selectedvaluepath-and-displaymemberpath