Silverlight Datagrid 上 UpdateSourceTrigger LostFocus 的解决方法?

2023-12-23

我有一个 Silverlight 2 应用程序,用于验证 OnTabSelectionChanged 数据。我立即开始希望 UpdateSourceTrigger 不仅仅允许 LostFocus,因为如果您单击选项卡而不离开控件,则 LINQ 对象在验证之前不会更新。

我通过将焦点设置到另一个控件然后返回 OnTextChanged 解决了 TextBoxes 的问题:

Private Sub OnTextChanged(ByVal sender As Object, ByVal e As TextChangedEventArgs)
    txtSetFocus.Focus()
    sender.Focus()
End Sub

现在我正在尝试在 DataGrid 中完成同样类型的 hack。我的 DataGrid 使用运行时为 CellTemplate 和 CellEditingTemplate 生成的 DataTemplate。我尝试将 TextChanged="OnTextChanged" 写入 DataTemplate 中的 TextBox,但它没有被触发。

有人有主意吗?


您也可以通过应用于文本框的行为来做到这一点 http://blog.mustoverride.com/2010/01/silverlight-updatesourcetrigger.html?showComment=1279149377285_AIe9_BFLaR4pbpg_swaitgIUU0PR-hQVluTHi6P3siH156dRQIYsaNKVxx_ptreNpwv-HaozS_tab7wC55uFRxgzpOU22HtkC6-Cz2DwtrHdnmZZ5dn0sOwczJ_MpPg5K5LsT24F6GdNHZyI9LYI4kQQaU0V7rtwuIkU1AsYxATywIYpt_ZIRS5lh4WjahPQqu4-c9TBPqHvJN0zQAQGAUsCeuIa0h_HR-rE7iUy4ajM3zzOACX3B9D3tQBXhLrGf0q0mG67thiUcZZqgvzr2eNENemhQpWLX_5Kky7Nj2WDwQcOxIDsYlWz6WTjVu8_UPVFuSTVJjmGajc9rEGDX7Xcq1ZwzVXhRTMCTw_IGXWYm_pp0in0V5G5LEwKViKkNLgFWL3BazgXZQjtFsnFT4Y2-K5FxMGIGmufAAo5uwMM1Q3GLbXwlhwAAcxz3Gar6Z-olH7ylmobDKmCKNedO2zb0ctdkPQZe7U2yYRg5OY-cI3PQtygpkQpjG6ap9yvUIf6Gpd6HErk8Q6OFy4AlpXqiiIriABLE-E1b-e9w44l1T_FQhGLEtiJD4bvY2VZXx5Pe1_0EISdX_PNPcN1E3a5iOmq7CppTkmY64gar1XZtWZ7xdZ18WldNXG3LDFEInWlUiSngpJdBqv0wT81_-RwxJuGY8Faq2iOATzih4274u1bJa73-HWzcepR9G5nl33NBWNCOWZbuW_Q8heTU6ea02X3D-E767OCxHTBi_NB7pRDyAq_stQiFPTD3H--g-DWrhVaI44PXBia88huy4-b1PIEyUzatDm747Hyw9ilRsQPH9RgUbuKocnTBbssmuhq8hK4vErFspeh-nEIHLVvyTxNs-YWhHKBpgY27k5bLZU1fSdyudw#c8238632009983091264

// xmlns:int is System.Windows.Interactivity from System.Windows.Interactivity.DLL)
// xmlns:behavior is your namespace for the class below
<TextBox Text="{Binding Description,Mode=TwoWay,UpdateSourceTrigger=Explicit}">
    <int:Interaction.Behaviors>
       <behavior:TextBoxUpdatesTextBindingOnPropertyChanged />
    </int:Interaction.Behaviors>
</TextBox>


public class TextBoxUpdatesTextBindingOnPropertyChanged : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.TextChanged += new TextChangedEventHandler(TextBox_TextChanged);
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        AssociatedObject.TextChanged -= TextBox_TextChanged;
    }

    void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        var bindingExpression = AssociatedObject.GetBindingExpression(TextBox.TextProperty);
        bindingExpression.UpdateSource();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Silverlight Datagrid 上 UpdateSourceTrigger LostFocus 的解决方法? 的相关文章

随机推荐