Я использую новый WPF Viewer для Crystal Reports в C #.Поскольку я использую MVVM, я действительно хотел бы связать источник отображаемых данных вместо того, чтобы делать это в загруженном событии.Поэтому я хотел реализовать прикрепленное свойство для источника - но привязка просто не работает, метод Getter даже не вызывается.Другие посты о привязке прикрепленных свойств также не помогли, и я не уверен, что я делаю по-другому.Кто-нибудь может помочь?Вот мой упрощенный код для присоединенного свойства:
public static class CrystalReportsAttached {
public static readonly DependencyProperty SourceProperty =
DependencyProperty.RegisterAttached(
"Source",
typeof(IEnumerable),
typeof(CrystalReportsAttached),
new UIPropertyMetadata(new ObservableList<Participant>() as IEnumerable, SourceChanged));
public static void SetSource(DependencyObject target, IEnumerable value) {
target.SetValue(SourceProperty, value);
}
public static IEnumerable GetSource(DependencyObject target) {
return (IEnumerable)target.GetValue(SourceProperty);
}
private static void SourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
CrystalReportsViewer reportViewer = d as CrystalReportsViewer;
if (reportViewer != null) {
MyCrystalReport report = new MyCrystalReport();
report.SetDataSource(d.GetValue(SourceProperty) as IEnumerable);
reportViewer.ViewerCore.ReportSource = report;
}
}
}
, где MyCrystalReport
- это оболочка для моего файла отчета rpt.
Если я сейчас привяжусь к источнику, как это, это не такработает:
<my:CrystalReportsViewer prop:CrystalReportsAttached.Source="{Binding MyList, Mode=OneWay}"/>
Я пытался связать DataGrid
s ItemsSource
таким же образом, и это работает, поэтому, похоже, нет ошибки с именем пути или чем-то подобным.
Любая помощь с благодарностью.Большое спасибо!