【发布时间】:2011-07-16 22:36:02
【问题描述】:
我有一个绑定到模型对象列表的组合框。我已将组合框 SelectedItem 绑定到模型类型的属性。加载窗口后,我的所有数据绑定都可以正常工作。 SelectedItem 设置正确,我可以直接使用存储库保存对象。
问题是当窗口第一次加载时,我初始化了 SelectedItem 属性,而我的组合框什么也不显示。在我开始绑定到对象之前,我绑定到了一个字符串列表,并且在初始化时效果很好。我知道我错过了一些东西,但我无法弄清楚。
提前感谢您提供的任何指导。
(关于此页面布局的一个注意事项。组合框实际上是 ListView 中使用的另一个 ItemTemplate 的一部分。ListView 绑定到主 MV 中的一个可观察集合。这个可观察集合的每个项目都是它自己一个 ModelView。它是具有 SelectedItem 属性的第二个 ModelView。)
这是我的模型:
public class DistributionListModel : Notifier, IComparable
{
private string m_code;
private string m_description;
public string Code
{
get { return m_code; }
set { m_code = value; OnPropertyChanged("Code"); }
}
public string Name
{
get { return m_description; }
set { m_description = value; OnPropertyChanged("Name"); }
}
#region IComparable Members
public int CompareTo(object obj)
{
DistributionListModel compareObj = obj as DistributionListModel;
if (compareObj == null)
return 1;
return Code.CompareTo(compareObj.Code);
}
#endregion
}
这里是我的 ModelView 中的相关代码:
public MailRoutingConfigurationViewModel(int agencyID)
: base()
{
m_agencyID = agencyID;
m_agencyName = DataManager.QueryEngine.GetAgencyName(agencyID);
IntializeValuesFromConfiguration(DataManager.MailQueryEngine.GetMailRoutingConfiguration(agencyID));
// reset modified flag
m_modified = false;
}
private void IntializeValuesFromConfiguration(RecordCheckMailRoutingConfiguration configuration)
{
SelectedDistributionList = ConfigurationRepository.Instance.GetDistributionListByCode(configuration.DistributionCode);
}
public DistributionListModel SelectedDistributionList
{
get { return m_selectedDistributionList; }
set
{
m_selectedDistributionList = value;
m_modified = true;
OnPropertyChanged("SelectedDistributionList");
}
}
最后是相关的 XAML:
<UserControl.Resources>
<DataTemplate x:Key="DistributionListTemplate">
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</UserControl.Resources>
<ComboBox
ItemsSource="{Binding Source={StaticResource DistributionCodeViewSource}, Mode=OneWay}"
ItemTemplate="{StaticResource DistributionListTemplate}"
SelectedItem="{Binding Path=SelectedDistributionList, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="False"
/>
【问题讨论】:
标签: c# wpf data-binding mvvm combobox