wpf ツールキットの autoCompleBox (codeplex のもの) から選択した項目にアクセスしようとしていますが、null 参照エラーが発生し続けます。
私は本当にこれでレンガの壁にぶつかりました!
ここに私のXAMLがあります:
<my:AutoCompleteBox
x:Name="autoTxtBoxProductCode"
VerticalAlignment="Top" Height="28" Margin="112,10,0,0" Width="144"
Background="#FFEDF4AB"
Populating="AutoBoxPopulateProductCode"
ValueMemberPath="ProductCode"
PreviewKeyUp="autoTxtBoxProductCode_PreviewKeyUp"
HorizontalAlignment="Left"
IsTextCompletionEnabled="False"
<my:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ProductID}" FontWeight="Bold" Foreground="Black" Width="25"/>
<TextBlock Text="{Binding ProductBrandCode}" FontWeight="Bold" Foreground="Black" Width="55"/>
<TextBlock Text="{Binding ProductCode}" Foreground="Black"/>
</StackPanel>
</DataTemplate>
</my:AutoCompleteBox.ItemTemplate>
</my:AutoCompleteBox>
それがアイテムソースを更新する方法です:
private void AutoBoxPopulateProductCode(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
// TextBox t = (TextBox)sender;
autoTxtBoxProductCode.ItemsSource = Product.GetListOfProductCodesAndBrands(autoTxtBoxProductCode.Text.ToString());
autoTxtBoxProductCode.PopulateComplete();
}
私がアーカイブしようとしているのは、ユーザーがEnterキーを押したときにProductIDを取得したいということです。
私はこのようなことを試しました:
private void autoTxtBoxProductCode_PreviewKeyUp(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter)
{ return; }
else
{
Product prd = (Product)(autoTxtBoxProductCode.SelectedItem);
MessageBox.Show(prd.ProductID.ToString());
}
}
しかし、上記は null 参照エラーを返します。
ある種のバインディングが欠けているに違いありませんが、WPF は初めてなので、何を変更する必要があるのか わかりません。
助けていただければ幸いです。
編集:
この質問を投稿した直後に解決策を見つけました。追加する必要があったのは次のとおりです。
SelectedItem="{Binding ElementName=this,
Path=ProductID,
Mode=TwoWay,
UpdateSourceTrigger=LostFocus}"
同様の問題を抱えている他の誰かに役立つことを願っています。
乾杯、