【问题标题】:Silverlight Textbox Binding TextChanged EventSilverlight 文本框绑定 TextChanged 事件
【发布时间】:2013-09-05 21:52:25
【问题描述】:

我有一个简单的 Silverlight TextBox,它通过条形码扫描仪接收文本。它基本上像粘贴一样起作用。无论如何,我希望我的 TextBox 在发现其内容发生变化时,在我的 ViewModel 中运行 LoadScannedResults()。默认情况下,当我执行双向绑定时,我的 ViewModel 中的 ScanDocumentNumber 会在我点击离开页面时触发。如果我在我的代码隐藏中输入tbDocumentNumber_TextChanged(),我可以获得所需的效果,但随后我点击了我的 ViewModel 两次——一次在 TextChanged 上,然后在我点击离开页面时再次点击。我希望它只发生在 TextChanged 上。感谢您的帮助!

这是我的 Home.xaml

<TextBox Name="tbDocumentNumber" Margin="3" VerticalAlignment="Center" Text="{Binding ScanDocumentNumber, Mode=TwoWay}" Width="150" />

这是我的 Home.xaml.cs

public Home()
{
    m_DataContext = HomeViewModel.Current;
    this.DataContext = m_DataContext;

    InitializeComponent();

    tbDocumentNumber.TextChanged += new TextChangedEventHandler(tbDocumentNumber_TextChanged);
}

private void tbDocumentNumber_TextChanged(object sender, TextChangedEventArgs e)
{
    object focusObj = FocusManager.GetFocusedElement();
    if (focusObj != null && focusObj is TextBox)
    {
        var binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
        binding.UpdateSource();
        tbDocumentNumber.SelectAll();
    }
}

这是我的 HomeViewModel.cs

private string m_ScanDocumentNumber;
public string ScanDocumentNumber
{
    get { return m_ScanDocumentNumber; }
    set
    {
        if (m_ScanDocumentNumber == null || !m_ScanDocumentNumber.Equals(value))
        {
            m_ScanDocumentNumber = value.Trim();
            RaisePropertyChanged("ScanDocumentNumber");
        }
        if (m_ScanDocumentNumber != null && m_ScanDocumentNumber != "")
        {
            LoadScannedResults();
        }
    }
}

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    我不确定,但 UpdateSourceTrigger 在这种情况下可能会有所帮助。

    TextBox.Text 属性的默认 UpdateSourceTrigger 值为 LostFocus。这意味着如果应用程序有一个带有数据绑定 TextBox.Text 属性的 TextBox,那么您在 TextBox 中键入的文本不会更新源,直到 TextBox 失去焦点(例如,当您单击离开 TextBox 时)。

    如果您希望在键入时更新源,请将绑定的 UpdateSourceTrigger 设置为 PropertyChanged。在以下示例中,TextBox 和 TextBlock 的 Text 属性绑定到相同的源属性。 TextBox 绑定的 UpdateSourceTrigger 属性设置为 PropertyChanged。

    <TextBox Name="itemNameTextBox"
             Text="{Binding Path=ItemName,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多