Проблема RejectChanges () со службами RIA и Silverlight 4 - PullRequest
1 голос
/ 22 июля 2010

Я использую SL4 и версию RIA Services, выпущенную одновременно с SL4 (середина апреля 2010 года).

У меня есть сетка данных, которая связана с PagedCollectionView, который оборачивает EntitySet, возвращенный службами RIA, т.е. context.MyEntities. Я не разрешаю редактировать прямо в сетке. Вместо этого у меня есть отдельная панель «обновления» (UserControl) с элементами управления, которые ссылаются на выбранный элемент сетки.

После внесения нескольких изменений я попытался вызвать context.RejectChanges (). Почти все возвращается в исходное состояние, включая свойства связанных объектов. Проблема в том, что у меня есть набор из 3 переключателей на панели «обновление», которые привязаны к перечисляемому свойству в связанной сущности. Я использую конвертер значений, чтобы установить каждую кнопку в соответствии со значением перечисленного свойства. Привязки для всех трех переключателей установлены для привязки TwoWay. По какой-то причине context.RejectChanges () возвращает некоторые изменяет это свойство, но пропускает изменяется на выбранный элемент . Это происходит даже тогда, когда я перехожу на другую строку после внесения изменений, возвращаюсь к измененной строке и , а затем отклоняет изменения.

(Возможно, проблема может быть связана с тем, что нажатие на радио-кнопку влияет на две привязки: радио-кнопка, которая стала непроверенной и радио-кнопка, которая стала проверенной. Просто теория ...) Вот xaml для переключатели:

<StackPanel Orientation="Horizontal"> 
    <RadioButton x:Name="rbUnmodified" Content="Unmodified" Margin="3" IsChecked="{Binding ReviewStatus, Mode=TwoWay, Converter={StaticResource enumBoolConverter}, ConverterParameter=Unmodified}" /> 
    <RadioButton x:Name="rbInProgress" Content="In Progress" Margin="3" IsChecked="{Binding ReviewStatus, Mode=TwoWay, Converter={StaticResource enumBoolConverter}, ConverterParameter=InProgress}" /> 
    <RadioButton x:Name="rbResolved" Content="Resolved" Margin="3" IsChecked="{Binding ReviewStatus, Mode=TwoWay, Converter={StaticResource enumBoolConverter}, ConverterParameter=Resolved}" /> 
</StackPanel>

Внутри преобразователя значений, если перечисляемое значение связанного свойства совпадает с параметром преобразователя, преобразователь возвращает значение true, иначе оно возвращает значение false.

Есть идеи как это исправить?

1 Ответ

1 голос
/ 23 июля 2010

Я был на правильном пути, когда подозревал, что проблема связана с наличием нескольких двусторонних привязок к одному и тому же свойству, но на самом деле ошибка была в методе ConvertBack моего конвертера значений EnumToBool. (К сожалению!) Мне нужно было изменить его, чтобы он возвращал DependencyProperty.UnsetValue, когда значение равно false. Теперь все отлично работает!

...