После того, как вы потратили время на это, следуя по пятам моего Last Problem, я начинаю ощущать, что Framework 4 является мастером тонкого зла, или мой компьютер преследует.WPF Combobox binding: не может изменить выбор
У меня есть три comboboxes и текстовое поле в форме WPF, и у меня есть готовый Subsonic 3 ActiveRecord DAL. Когда я загружаю эту форму «редактировать запись», поля со списком заполняются правильно, они выбирают правильные элементы, а текстовое поле имеет правильный текст. Я могу изменить текст TextBox и сохранить запись просто отлично, но комбобокс НЕ МОЖЕТ ИЗМЕНИТЬСЯ. Списки выпадают и выделяются, но когда вы нажимаете на элемент, выбранный элемент остается прежним.
Вот мой XAML:
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Asset</TextBlock>
<ComboBox Name="cboAsset" Width="180"
DisplayMemberPath="AssetName"
SelectedValuePath="AssetID"
SelectedValue="{Binding AssetID}" ></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Status</TextBlock>
<ComboBox Name="cboStatus" Width="180"
DisplayMemberPath="JobStatusDesc" SelectedValuePath="JobStatusID"
SelectedValue="{Binding JobStatusID}" ></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Category</TextBlock>
<ComboBox Name="cboCategories" Width="180"
DisplayMemberPath="CategoryName"
SelectedValuePath="JobCategoryID"
SelectedValue="{Binding JobCategoryID}" ></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Reason</TextBlock>
<TextBox Name="txtReason" Width="380" Text="{Binding Reason}"/>
</StackPanel>
Вот соответствующие надрезы моего кода (intJobID передаваемая):
SvcMgrDAL.Job oJob;
IQueryable<SvcMgrDAL.JobCategory> oCategories = SvcMgrDAL.JobCategory.All().OrderBy(x => x.CategoryName);
IQueryable<SvcMgrDAL.Asset> oAssets = SvcMgrDAL.Asset.All().OrderBy(x => x.AssetName);
IQueryable<SvcMgrDAL.JobStatus> oStatus = SvcMgrDAL.JobStatus.All();
cboCategories.ItemsSource = oCategories;
cboStatus.ItemsSource = oStatus;
cboAsset.ItemsSource = oAssets;
this.JobID = intJobID;
oJob = SvcMgrDAL.Job.SingleOrDefault(x => x.JobID == intJobID);
this.DataContext = oJob;
Вещи, которые я пробовал:
- Явное
IsReadOnly="false"
иIsSynchronizedWithCurrentItem="True"
- Ch обводка combobox
ItemSources
отIQueryables
доLists
. - Построение моего собственного объекта работы (простой класс сущности ванили с использованием
INotifyPropertyChanged
). - Каждый режим привязки для comboboxes.
ItemsSource="{Binding}"
дозвуковой ДАЛ не реализует INotifyPropertyChanged
, но я не вижу, как это было бы нужно для простого связывания, как это. Я просто хочу выбрать что-нибудь из выпадающего списка и сохранить его.
Сравнивая это с моей последней проблемой (ссылка в верхней части этого сообщения), у меня, похоже, есть что-то действительно странное с источниками данных. Может быть, это подзвуковая вещь?
EDIT: По какой-то причине аксессуар набора попадает только в свойство AssetID и только в первый раз. WPF теперь заголовок для WTF :)
EDIT 2: Ты должен быть, шутите мне- я удалил связывание (т.е. только имеет DisplayMemberPath, а valuememberpath и itemssouce), и это все еще делаешь это! Он принимает ваш первый выбор, а затем не изменится.
Вы пытались установить контрольную точку в наборе аксессуаров 'Job.AssetID'? Он попадает? Что происходит, когда вы проходите? Это действительно изменилось? Может быть, это исключение? –
Если я использую Subsonic DAL, он не попадает в аксессуар. Если я использую свой собственный объект, он также не попадает в него, но вокруг прямоугольника появляется красный прямоугольник ... ?? – SteveCav
Убедитесь, что красный прямоугольник исключений был ошибкой типа в моем собственном объекте (Int16 против 32). Так что нет, аксессуар не попадает. – SteveCav