Потратив на это часы, следуя по пятам за моей Последней проблемой , я начинаю чувствовать, что Framework 4 - мастер тонкого зла, или мой компьютер часто посещается.
У меня есть три поля со списком и текстовое поле в форме 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"
- Изменение поля со списком
ItemSources
с IQueryables
на Lists
.
- Создание собственного объекта Job (простой класс сущностей vanilla, использующий
INotifyPropertyChanged
).
- Каждый режим привязки для выпадающих списков.
ItemsSource="{Binding}"
Subsonic DAL не реализует INotifyPropertyChanged
, но я не вижу необходимости в таком простом связывании, как это. Я просто хочу иметь возможность выбрать что-то из выпадающего списка и сохранить его.
Сравнивая это с моей последней проблемой (ссылка в верхней части этого сообщения), я, кажется, что-то действительно странное происходит с источниками данных. Может быть, это дозвуковая вещь?
РЕДАКТИРОВАТЬ: По какой-то причине установленный метод доступа применяется только к свойству AssetID и только в первый раз. WPF сейчас движется к WTF:)
РЕДАКТИРОВАТЬ 2: Ты, должно быть, шутишь - я удалил привязку (т. Е. У нее есть только displaymemberpath, valuememberpath и itemssouce), и это ВСЕ ЕЩЕ делает это! Он принимает ваш первый выбор, а затем не изменится.