Сначала я разместил это на форуме PRISM4, но получил предложение попробовать и этот форум :) Я использую WPF4 BTW ...
Я запускаю PRISM4 и изо всех сил пытаюсь заставить работать привязку данных. Я следую шаблону MVVM и имею модель представления, которая изначально загружает данные из СУБД и обертывает их в ICollectionView. Это отлично работает, данные отображаются в привязанном DatGrid, но я изо всех сил пытаюсь сохранять изменения, внесенные в данные, представленные в DataGrid, объявленном ниже.
Модель представления публикует ICollectionView через свойство чтения / записи «Results», которое, как вы можете видеть, имеет режим привязки «TwoWay». Я думал, что этого будет достаточно, чтобы сохранить изменения, внесенные в состояние флажков, но нет :( Я экспериментировал с несколькими способами, чтобы добиться этого, но состояние флажка не передается обратно в модель представления. I ' он перехватил вызов метода «PlotClicked», который является объектом ICommand, но переданный аргумент имеет неизменный атрибут «Plot»! Это особенно очевидно, когда я щелкаю один из заголовков столбца и представление сортируется - отмеченные строки unchecked, что является состоянием флажков по умолчанию при извлечении из базы данных.
Что я здесь делаю не так?
Заранее большое спасибо - я действительно застрял здесь :( / Peter
<DataGrid Grid.Row="0" Name="gridResults" ItemsSource="{Binding Results,Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Plot">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Plot, Mode=TwoWay}"
HorizontalAlignment="Center"
Command="{Binding Path=DataContext.PlotClicked,Mode=OneWay, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
Я попробовал указанные мне предложения. Вот что я сделал:
В модели представления я изменил свойство Result с ICollectionView на OC
общедоступные результаты ObservableCollection {получить; набор; }
Добавлены следующие ресурсы шаблона для UserControl, составляющего представление
Добавлен следующий код в DataGrid в разделе «Столбцы».
<DataGridTemplateColumn Header="cbTest" x:Name="cbTest" CellTemplate="{StaticResource IsSelectedColumnTemplate}" CellEditingTemplate="{StaticResource IsSelectedColumnTemplateEditing}" CanUserSort="True" Width="Auto" />
После внесения этих изменений я поэкспериментировал с различными настройками UpdateSourceTrigger в IsChecked = "{Привязка, упомянутая ... в (2) выше, безрезультатно. Изменения, которые я делаю для флажков, не переносятся обратно в ObservableCollection модели представления. .
Опять же, большое спасибо за попытку помочь мне здесь!
* ОБНОВЛЕНИЕ * Теперь я испытал что-то ДЕЙСТВИТЕЛЬНО ЖУТКОЕ :( Вот что я сделал:
public class ResultViewResult : IReslutViewResult
{
public bool Plot { get; set; }
public Guid ResultId { get; set; }
public DateTime Generated { get; set; }
public int Duration { get; set; }
...
Это не сработало в том смысле, что для свойства «Plot property» НИКОГДА нельзя было установить значение true, щелкнув столбец флажка в DataGrid! Теперь я сделал следующее:
public class ResultViewResult : IReslutViewResult
{
private bool _plot;
public bool Plot
{
get
{
return _plot;
}
set
{
_plot = value;
}
}
public Guid ResultId { get; set; }
public DateTime Generated { get; set; }
public Guid ResultId { get; set; }
public DateTime Generated { get; set; }
public int Duration { get; set; }
...
Результат, спросите вы? Это работает, и «Сюжет» настроен правильно! Вот, подумал я, это странно !!! Итак, я сделал следующее (просто закомментировал частную переменную и получил / установил код):
public class ResultViewResult : IReslutViewResult
{
public bool Plot { get; set; }
//private bool _plot = false;
//public bool Plot
//{
// get
// {
// return _plot;
// }
// set
// {
// _plot = value;
// }
//}
public Guid ResultId { get; set; }
public DateTime Generated { get; set; }
public int Duration { get; set; }
...
Хорошо, а как насчет результата? ОНО РАБОТАЕТ!!!??? Я ошеломлен ... В смысле какая разница между первым и последним ???? Мне ОЧЕНЬ неловко по этому поводу - я хочу знать, ЧТО здесь происходит за кулисами ... :(
Plot
, правильно ли вызываются методы get и set? - person Rachel   schedule 25.07.2011