1

バーコード スキャナー経由でテキストを受け取るシンプルな Silverlight TextBox があります。それは基本的にペーストのように機能します。とにかく、内容の変更に気付いたときに TextBox をLoadScannedResults()ViewModel で実行したいと思います。デフォルトでは、TwoWay Binding を実行すると、ScanDocumentNumber自分のページから離れた場所をクリックすると、ViewModel 内の がトリガーされます。コードビハインドを挿入すると目的の効果が得られますがtbDocumentNumber_TextChanged()、ViewModel を 2 回ヒットします。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();
        }
    }
}
4

1 に答える 1