バーコード スキャナー経由でテキストを受け取るシンプルな 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();
}
}
}