Я новичок в модели проектирования MVVM и работаю над проектом по автоматизации процессов доставки.
Особая проблема, с которой я сталкиваюсь, заключается в том, что у меня есть UserControl (мой EditShipmentView), который при загрузке назначает свой ViewModel своему DataContext. ViewModel передается recordID, который используется для извлечения объекта, представляющего поставку. Он делает это успешно, как я вижу в Mole (визуализаторе).
Ниже приведен фрагмент XAML, показывающий первую пару TextBox и то, как я думал, что привязки должны выглядеть.
<local:SnazzyForm Background="#FF318AE1">
<Grid Margin="6,0,0,0">
<TabControl Style="{DynamicResource SnazzyTabControl}" TabStripPlacement="Left" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,0,0,50">
<TabItem Header="Overview" Style="{DynamicResource TransparentTabItems}">
<Grid Margin="6,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel DataContext="{Binding Path=ShipmentRecord}">
<TextBlock HorizontalAlignment="Left" Text="Contact Info" TextWrapping="Wrap" Style="{DynamicResource TitleText}"/>
<Path Fill="#FFFFB900" Stretch="Fill" HorizontalAlignment="Left" Width="200" Height="2" Data="M0,16.5 L278.5,16.5" Stroke="#FFFFB900"/>
<StackPanel Margin="0,10,0,0">
<Grid Margin="0,16,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".40*"/>
<ColumnDefinition Width=".60*"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Right" Text="Company" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource FieldLabel}" TextAlignment="Right" Margin="0,2,9,0"/>
<TextBox Text="{Binding Path=CompanyName, Mode=TwoWay, UpdateSourceTrigger=LostFocus, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1"/>
</Grid>
<Grid Margin="0,16,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".40*"/>
<ColumnDefinition Width=".60*"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Right" Text="Contact" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource FieldLabel}" TextAlignment="Right" Margin="0,2,9,0"/>
<TextBox Grid.Column="1" Text="{Binding Path=ContactName}" TextWrapping="Wrap" d:LayoutOverrides="Height"/>
</Grid>
Итак, подведем итоги ...
EditShipmentView (Наследует от SnazzyForm)
DataContext - это EditShipmentViewModel
EditShipmentViewModel.ShipmentRecord (успешно) заполняется объектом отгрузки
ShipmentRecord.CompanyName - это строка, которая, очевидно, должна возвращать название компании.
Имейте в виду, что это только моя последняя попытка. Ранее я не связывал DataContext с Stackpanels и имел текстовые поля, связанные как «{Binding Path = ShipmentRecord.CompanyName}», и то, что кажется сотней различных вариантов. То, что у меня осталось, быстро спадает. Пожалуйста, подумай о моих волосах, отправь помощь.
Cory