Я пытался решить эту проблему, казалось бы, целую жизнь, но, к сожалению, безрезультатно ... даже после поиска в stackoverflow и на других сайтах.
Я постараюсь сделать мою проблему короткой, но по существу.
Используя WPF и методологию MVVM, у меня есть: A View и ViewModel.
Из представления XAML я связываю comboBox со списком значений в объекте словаря ключ / значение.Это работает нормально - я могу видеть выпадающие значения, когда я нажимаю на поле со списком.
Примечание: Каждая запись может иметь более 1 партии в сетке, где отображается комбинированный список.
<dxg:GridColumn Header="Instalments"
Width="100"
AllowSorting="False"
AllowAutoFilter="False">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEnabled="{Binding Data.IsIncludedInDD}"
Name="cbInstalmentValues"
Width="200"
ItemsSource="{Binding Data.D_InstalmentValues}"
SelectedIndex="{Binding Data.Instalments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Value"
SelectedValuePath="Key"
SelectedValue="{Binding SelectedInstalmentValue, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" />
Код:
private static readonly Dictionary<int, string> D_instalmentValues = new Dictionary<int, string>
{
{0, "None"},
{1, "1 Instalment"},
{2, "2 Instalments"},
{3, "3 Instalments"},
{4, "4 Instalments"},
{5, "5 Instalments"},
{6, "6 Instalments"},
{7, "7 Instalments"},
{8, "8 Instalments"},
{9, "9 Instalments"},
{10, "10 Instalments"},
{11, "11 Instalments"},
{12, "12 Instalments"}
};
public Dictionary<int, string> D_InstalmentValues
{
get
{
return _instalmentValues;
}
set
{
_instalmentValues = value;
}
}
Итак, когда я загружаю свое приложение, я хочу, чтобы comboBox считывал значение из свойства 'Installments' в viewmodel и связывался с тем же индексомзначение в словаре и отображать количество взносов .. т.е.: нет, 1 взнос и т. д. *
public int Instalments
{
get
{
return _chargeTemplate.Instalments;
}
set
{
if (value == -1)
{
value = value + 1;
_chargeTemplate.Instalments = _chargeTemplate.Instalments;
}
else
{
if (_chargeTemplate.Instalments == value)
{
return;
}
else
{
_chargeTemplate.Instalments = value;
}
}
//NotifyNotRegister("Instalments");
RaisePropertyChanged("Instalments");
}
}
Теперь значение '_chargeTemplate.Instalments' содержит значение из столбца Рассрочка из записи вбаза данных.
Похоже, что поле со списком не связывается, если значение в свойстве Installments равно 0. Поле не заполнено.
Заполняется после выбора записи, значение которой большечем 0.
Когда я попытался заполнить все поля рассрочки в таблице sql значениями от 1 до 12, выбранный индекс не был установлен правильно для самого первогов моем приложении отображается ecord, но если я выбрал следующую запись, она отображалась нормально ... тогда, если я снова выбрал первую запись, она также отображалась правильно.
Другая странная часть поведения была для первой записи, если у меня было 3 части, а в части 1 = 2 таблицы sql - часть 2 = 4 и часть 3 = 0 ... в первых 2 частях этой записи был установлен индекс комбинированного списка, но последняя запись была пустой.
В итоге - мне нужно знать, как при загрузке приложения - как сделать привязку выбранного индекса из модели представления к представлению, при этом поле со списком не будет пустым для первой записи или для значений, для которых выбран индекс0.
Надеюсь, здесь достаточно информации ...
Большое спасибо
ОБНОВЛЕНИЕ:
Я внес небольшое изменение в XAML исвойство, с которым я связываю combobox selectedindex.Это позволяет значению 0 отображать «Нет» в выпадающем списке, где значение равно 0 для значения взноса сотрудников в базе данных sql.
Однако самый первый человек, отображаемый в списке записей, не имеет выбранныйindex установлен на индекс значения словаря, если я не выберу другого человека и снова не выберу первого человека ... странно
ViewModel
public int Рассрочка {get {return _chargeTemplate.Instalments;}}
XAML
SelectedIndex = "{Binding Data.Instalments, Mode = OneWay}"