Итак, вот настройки. У меня есть два разных представления WPF. StandardEngineeredView и StandardEngineeredPrintView. У меня есть ObservableCollection под названием ModelRevisionList в моем StandardEngineeredViewModel.
Я пытаюсь привязать источник данных ModelRevisionList к двум различным представлениям. У меня есть контекст данных моих представлений, настроенный на ту же модель представления. В моем StandardEngineeredView есть кнопка, которая ведет меня к StandardEngineeredPrintView. Это второе представление, по сути, будет просто использоваться, чтобы позволить кому-то печатать данные. Примечание. У меня есть несколько других свойств, к которым я буду привязывать модель представления из обоих представлений. Я просто еще не пытался сделать это, потому что при попытке привязки к списку ревизий я получаю следующую ошибку:
System.Windows.Markup.XamlParseException
HResult = 0x80131501
Сообщение = 'Добавить значение в коллекцию типа' System.Windows.Controls.ItemCollection ', вызвало исключение.' Номер строки «204» и позиция строки «55».
Источник = PresentationFramework
Трассировки стека:
в System.Windows.Markup.WpfXamlLoader.Load (XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, логическое значение skipJournaledProperties, объект rootObject, параметры XamlObjectWriterSettings, Uri baseUri)
в System.Windows.Markup.WpfXamlLoader.LoadBaml (XamlReader xamlReader, логическое skipJournaledProperties, объект rootObject, XamlAccessLevel accessLevel, Uri baseUri)
в System.Windows.Markup.XamlReader.LoadBaml (Потоковый поток, ParserContext parserContext, родительский объект, логическое значение closeStream)
в System.Windows.Application.LoadComponent (объектный компонент, Uri resourceLocator)
в LabelPrinting.Views.EngineeringViews.StandardEngineeredPrintView.InitializeComponent () в C: \ Users \ eric_obermuller \ source \ repos \ LabelPrinting \ LabelPrinting \ Views \ EngineeringViews \ StandardEngineeredPrintView.xaml: строка 1
Внутреннее исключение 1:
InvalidOperationException: операция недопустима во время использования ItemsSource. Вместо этого открывайте и изменяйте элементы с помощью ItemsControl.ItemsSource.
Соответствующая информация
- Я использую MVVM Light.
- Мой первый вид изначально привязан к наблюдаемой коллекции, и данные отображаются в виде просто отлично.
- Оба представления используют один и тот же контекст данных.
- Ошибка выдается, когда я получаю наблюдаемую коллекцию из модели представления.
StandardEngineeredViewModel Список редакций
private ObservableCollection<Revision> _ModelRevisionList = new ObservableCollection<Revision>();
public ObservableCollection<Revision> ModelRevisionList
{
get { return _ModelRevisionList; } //Error thrown here upon get
set { Set(ref _ModelRevisionList, value); }
}
Поле со списком StandarEngineeredView, которое связано
<ListBox
BorderBrush="{StaticResource BackgroundBlueBrush}"
ItemsSource="{Binding ModelRevisionList}"
SelectedItem="{Binding SelectedRevision}"
DisplayMemberPath="Date"
Margin="70 10"
MinHeight="150"
MaxHeight="150"
ItemStringFormat="{}{0:MM/dd/yyyy}"/>
StandardEngineeredPrintView Вид сетки, который связан
<Border Grid.Column="1" MaxHeight="250" MaxWidth="400" MinWidth="400">
<DataGrid ItemsSource="{Binding ModelRevisionList}" AutoGenerateColumns="False">
<DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
<DataGridTextColumn Header="Edited By" Binding="{Binding EditedBy}"/>
<DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
</DataGrid>
</Border>
Контекст данных, который устанавливается в обоих представлениях
DataContext="{Binding StandardEngineeredViewInstance, Source={StaticResource Locator}}"
Просмотр модели Locator
public class ViewModelLocator
{
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SetupNavigation();
if (ViewModelBase.IsInDesignModeStatic)
{
// Create design time view services and models
SimpleIoc.Default.Register<IDataAccessService, DataAccessService>();
}
else
{
// Create run time view services and models
SimpleIoc.Default.Register<IDataAccessService, DataAccessService>();
}
}
public StandardEngineeredViewModel StandardEngineeredViewInstance
{
get
{
SimpleIoc.Default.Register<StandardEngineeredViewModel>();
return ServiceLocator.Current.GetInstance<StandardEngineeredViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
private static void SetupNavigation()
{
SimpleIoc.Default.Unregister<IFrameNavigationService>();
var navigationService = new FrameNavigationService();
navigationService.Configure("StandardEngineeredPrintView", new Uri("/Views/EngineeringViews/StandardEngineeredPrintView.xaml", UriKind.Relative));
SimpleIoc.Default.Register<IFrameNavigationService>(() => navigationService);
}
}
Теперь, из-за ошибки, я думаю, что это как-то связано с тем, что я использую наблюдаемую коллекцию в моем StandardEngineeredView перед переходом к StandardEngineeredPrintView. Можете ли вы привязать два представления к одному источнику данных? Я делаю что-то неправильно, о чем я просто не знаю?
Я ценю любые предложения, и если вам нужна дополнительная информация / код, просто скажите об этом.
Спасибо!