У меня есть поле со списком, который связан со списком объектов модели. Я связал поле со списком SelectedItem со свойством, которое является типом модели. Вся моя привязка данных прекрасно работает после загрузки окна. SelectedItem установлен правильно, и я могу сохранить объект напрямую с хранилищем.
Проблема в том, что при первой загрузке окна я инициализирую свойство SelectedItem, и мой комбинированный список ничего не отображает. Прежде чем перейти к привязке к объектам, я привязал список строк, и это отлично работало при инициализации. Я знаю, что что-то упустил, но не могу этого понять.
Заранее благодарим за любые рекомендации, которые вы можете предоставить.
(Одно примечание о макете этой страницы. На самом деле поля со списком являются частью другого ItemTemplate, который используется в ListView. ListView связан с наблюдаемой коллекцией в главном MV. Каждый элемент этой наблюдаемой коллекции сам по себе ModelView. Это тот второй ModelView, который имеет свойство SelectedItem.)
Вот моя модель:
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"
/>