Wpf 将对象属性值放入文本框的时间很长
我是MVVM设计模式的新手,我正在从事一个自动化发货流程的项目 我遇到的特殊问题是我有一个UserControl(我的EditShipmentView),当它加载时,会将它的ViewModel分配给它的DataContext。ViewModel被传递一个recordID,它使用该recordID提取表示装运的实体。它成功地做到了这一点,正如我在Mole(可视化工具)中看到的那样 下面是一个XAML片段,显示了前两个文本框,以及我认为绑定应该是什么样子Wpf 将对象属性值放入文本框的时间很长,wpf,data-binding,mvvm,Wpf,Data Binding,Mvvm,我是MVVM设计模式的新手,我正在从事一个自动化发货流程的项目 我遇到的特殊问题是我有一个UserControl(我的EditShipmentView),当它加载时,会将它的ViewModel分配给它的DataContext。ViewModel被传递一个recordID,它使用该recordID提取表示装运的实体。它成功地做到了这一点,正如我在Mole(可视化工具)中看到的那样 下面是一个XAML片段,显示了前两个文本框,以及我认为绑定应该是什么样子 <local:SnazzyForm B
<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是一个字符串,显然应该返回公司名称
请记住,这只是我最近的一次尝试。以前,我没有绑定Stackpanels DataContext,而是将文本框绑定为“{Binding Path=ShipmentRecord.CompanyName}”,这似乎是一百种不同的变体。我留下的头发正在迅速退去。求你了,想想我的头发,送我帮忙
科里给我们看看你的代码?您的视图模型可能只是在视图更改时没有通知视图。如果绑定不正确(未解析),您将在VisualStudio的“调试输出”窗口中看到相应的输出。同时检查。确保
EditShipmentViewModel
(可能的罪魁祸首)和ShipmentRecord
实现
如果在设置初始视图后加载数据,并且
EditShipmentViewModel
类没有为ShipmentRecord
引发PropertyChanged事件,则视图(xaml)将永远不会知道更新绑定,您将看到一个空字符串。这应该可以工作-在输出窗口中是否有任何数据绑定错误?在输出窗口中没有任何数据绑定错误。起初我是这样,但那是因为记录加载正在悄无声息地失败。一旦修复,仍然没有文本,也没有错误告诉我原因。科里:看我的(新)答案-这是我能想到的主要问题,在这种情况下。OnPropertyChanged(“ShipmentRecord”)早在ViewModel创建的初始阶段就注释掉了,现在是一个问题的罪魁祸首,让我。。。很生气。谢谢你的帮助!科里