LostFocus事件在获得焦点时触发

时间:2013-08-30 11:54:19

标签: c# wpf

我有一个itemscontrol绑定到一组对象。

在数据模板中,我绑定了一个动作,如果它们的焦点丢失,它将被创建的所有控件使用。

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

现在,如果Textbox 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" />

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

1 个答案:

答案 0 :(得分:0)

如果您的操作应该更新绑定源(例如Window,它看起来与您的示例相似),您可能想尝试将OneWayToSource添加到Binding中,以便绑定仅以一种方式发生 - 从文本框到它绑定的任何内容。