2013-08-30 37 views
1

我有一个itemscontrol,它绑定到一组对象。LostFocus事件在获得焦点时触发

在数据模板中,我绑定了将由所有创建的控件在失去焦点时所使用的操作。

在控件中,有一个文本框,所以如果项目控件ItemSource中有1个项目,则会有2个文本框。

现在,如果文本框1有焦点,并且我单击除了文本框2之外的某个位置,该动作将执行一次(因为焦点已丢失)。但是如果我点击文本框2,该动作会执行两次。为什么?

<ItemsControl Grid.Row="1" Margin="0,5,0,5" ItemsSource="{Binding 
     RelativeSource={RelativeSource FindAncestor, 
     AncestorType={x:Type Window}}, Path=Collection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="{x:Type ct:CollectionItem}"> 
      <cc:TestControl 
       ValueChangedAction="{Binding 
        RelativeSource={RelativeSource FindAncestor, 
        AncestorType={x:Type Window}}, Path=ValueChangedAction}" 
       VerticalAlignment="Center" HorizontalAlignment="Center" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

这是控件。

<ewt:DecimalUpDown Tag="{Binding Uid}" Grid.Row="0" Grid.Column="3" 
    HorizontalAlignment="Stretch" TextAlignment="Left" Margin="10,5,10,5" 
    FormatString="C2" ShowButtonSpinner="False" VerticalAlignment="Center" 
    Value="{Binding Value}" LostFocus="DecimalUpDown_LostFocus" /> 

绑定的动作在此事件处理程序中执行。

+0

好的,你的行动应该做什么?它是否以某种方式对绑定源采取了行动(例如,绑定窗口发生了什么?)假设对此问题的答案是肯定的,请参阅下面的答案。 – fourpastmidnight

+0

'DecimalUpDown'是否有问题的文本框?因为如果是这样的话,那么你的'DecimalUpDown'可能会触发'LostFocus'事件(参见你在'ewt:DecimalUpDown'中发布的代码,还有一个'@ LostFocus'属性)以及文本框 - 它是一个组成部分控制'DecimalUpDown' - 你绑定。 – fourpastmidnight

回答

0

如果您的行为应该以更新绑定的源(如窗口,它看起来像你的例子),你可能想尝试加入OneWayToSource到你的绑定,这样的结合只能从文本框出现的一种方式—到任何它必然。

+0

实质上,该操作将更新ItemsControl的项目源。也就是说,如果有两个项目,则更改一个文本框中的值意味着更新另一个文本框中的值 –

相关问题