пишу я спокойно себе разметку, никого не трогаю и тут в один прекрасный момент при сборке вылетела ошибка, которую на протяжении нескольких часов я никак не могу решить. В чем суть, как я понял, если я добавляю на страницу Page111 Data Context MainViewModel и оставляю все так как на первом скриншоте, то вылетает ошибка.
А если я убираю DataContext, то все загружается нормально При этом, если я убираю Content = new Page111() и оставляю в XAML Data Context, то тоже все загружается нормально. А самое интересное в том, что у меня все до этого работало прекрасно, пока я не начал писать ItemControl для DockPanel. Уже голову себе всю сломал, подскажите, в чем дело)
internal partial class MainViewModel{
[ObservableProperty] private ObservableCollection<Client> _clients = new();
[ObservableProperty] private ObservableCollection<TabItem> _tabItems = new();
[ObservableProperty] private ObservableCollection<ScreenShotModel> _screenShots = new();
public MainViewModel()
{
ApplicationContext db = new();
var users = db.Clients;
foreach (var client in users)
{
Clients.Add(client);
}
TabItems.Add(
new TabItem
{
Title = "89156347371",
Content = new Page111(),
}
);
ScreenShots.Add(new ScreenShotModel
{
Title = $"Скриншот",
ImgSours = "Regular_FileImage",
Text = "",
});
}}
internal class TabItem : ObservableRecipient{
private string _title;
private Page111 _content;
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
public Page111 Content
{
get => _content;
set => SetProperty(ref _content, value);
<Page x:Class="ChipTunningApp.Views.Windows.TabControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:fa="http://schemas.fontawesome.com/icons/"
xmlns:view="clr-namespace:ChipTunningApp.ViewModels.MainViewModel"
xmlns:models="clr-namespace:ChipTunningApp.Models"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="TabControl1xaml">
<Page.DataContext>
<view:MainViewModel></view:MainViewModel>
</Page.DataContext>
<Grid>
<ScrollViewer>
<StackPanel>
<DockPanel Height="85" Dock="Top" Margin="10 10 10 30">
<UniformGrid Rows="2" Columns="6">
<TextBlock Text="Имя клиента" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
<TextBlock Text="Номер клиента" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
<TextBlock Text="Номер авто" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
<TextBlock Text="Марка авто" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
<TextBlock Text="Модель авто" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
<TextBlock Text="Проблема" HorizontalAlignment="Center" Height="20" FontSize="16" FontWeight="Bold"/>
<TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
<TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
<TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
<TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
<TextBox Margin="3" BorderThickness="3" FontSize="15" FontWeight="DemiBold"/>
<CheckBox HorizontalAlignment="Center" Margin="0 8 0 0" BorderThickness="3"/>
</UniformGrid>
</DockPanel>
<DockPanel Margin="0 0 0 30">
<TextBlock Text="Скриншоты" HorizontalAlignment="Center" Height="30" FontSize="20" FontWeight="Bold"/>
</DockPanel>
<StackPanel Orientation="Horizontal">
<Grid Height="250">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0" Margin="30 10 10 10">
<ItemsControl ItemsSource="{Binding ScreenShots}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<fa:ImageAwesome Icon="{Binding ImgSours}" Height="100" Width="100"/>
<TextBox Text="{Binding Text}" Width="100" Height="100"></TextBox>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DockPanel>
</Grid>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Grid>
</Page>


Page.DataContext- это тоже самое, что сделатьDataContext = new MainViewModel(), когда вы так делаете, у вас создается новаяMainViewModel, в которой по новой инициализируется страница, в которой опять создается НОВЫЙMainViewModel, который создает страницу, и так по кругу, пока не переполнится память или не отработает защита. Вообще, вы не должны хотеть устанавливатьDataContext, WPF с этим справляется самостоятельно, без вашей помощи, вам достаточно задать главному окну контекст и все. Ну и да, контекст в XAML является нарушением MVVM – EvgeniyZ Sep 27 '23 at 15:34