由于我在一个ItemsControl中移动了View,因此我无法在ViewModel中触发EventTrigger。这是我的“Commmand宣言”,应该在LostFocus上发布:
public ICommand UpdateOrdersCommand { get; set; }
public void UpdateOrders(object param)
{
UpdateFields();
}
我的容器XAML:
<UserControl.Resources>
<WMS:PurchasingModel x:Key="ViewModel" />
<DataTemplate x:Key="myDataTemplate1">
<WMSViews:Purchasing1 />
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot"
Background="White"
DataContext="{StaticResource ViewModel}">
<ItemsControl ItemsSource="{Binding Path=ColPurchasing}"
ItemTemplate="{StaticResource myDataTemplate1}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
我的视图EvenTrigger用于在LostFocus上触发的位置:
<Classes:TextBoxEx TabIndex="1"
x:Name="tbFoodSales"
HorizontalAlignment="Left"
Height="23"
Margin="55,79,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="61"
TextAlignment="Right"
Text="{Binding Path=FoodSales, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<i:InvokeCommandAction Command="{Binding UpdateOrdersCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Classes:TextBoxEx>
答案 0 :(得分:2)
您可以通过以下方式绑定元素:
<Classes:TextBoxEx TabIndex="1"
x:Name="tbFoodSales"
HorizontalAlignment="Left"
Height="23"
Margin="55,79,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="61"
TextAlignment="Right"
Text="{Binding Path=FoodSales, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<i:InvokeCommandAction Command="{Binding ElementName=UserControlName, Path=DataContext.UpdateOrdersCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Classes:TextBoxEx>
答案 1 :(得分:0)
'UpdateOrdersCommand'绑定将在实际项目上查找该命令。例如。如果'ColPurchasing'是'Purchase'对象的集合,它会尝试查找Purchase.UpdateOrdersCommand
我猜你的UpdateOrdersCommand实际上在你的'ViewModel'类中
根据您的具体结构,以下内容可能有效
Command="{Binding ElementName=LayoutRoot, Path=DataContext.UpdateOrdersCommand}" />
这告诉绑定在LayoutRoot的DataContext上查找Command,在你的情况下应该是你的'ViewModel'。这适用于Silverlight和WPF,但如果您使用WPF,我认为使用RelativeSource绑定有更好的方法。
另一种选择是将“LostFocus”命令添加到Item的ViewModel(E.G. Purchase.LostFocus)并绑定到此。然后,您可以让此命令在父“ViewModel”类上调用UpdateOrders方法,或者让它引发“ViewModel”侦听的事件。
我一段时间没有发现的有用的东西是输出窗口(Debug&gt; Windows&gt; Output)。这显示了失败的绑定以及尝试解析的绑定路径。