は時:バインド
PART_TextBox
PART_Popup:
https://github.com/olohmann/WpfRxControls
カスタムコントロールの3つの部分があります。
PART_ListBox
関連するソース:
https://github.com/olohmann/WpfRxControls/blob/master/WpfRxControls/AutoCompleteTextBox.cs
https://github.com/olohmann/WpfRxControls/blob/master/WpfRxControls/Themes/Generic.xaml
すべてのピースが所定の位置にあり、かつ、次のように新しいコントロールを使用するコードは次のとおりです。
<ctrls:AutoCompleteTextBox
Grid.Row="1"
AutoCompleteQueryResultProvider="{Binding AutoCompleteQueryResultProvider}"
Margin="10" FontSize="20" PopupHeight="300">
</ctrls:AutoCompleteTextBox>
は、私はちょうどにフックする必要があります私のページのListBoxのSelectionChangedイベントXAML/ViewModel、これはどのように達成できますか?
編集:XAML/VMでは、コードを表示しません。これまでのところ、すべてのビューコードの背後は空であり、私はそれをそのままにしておきたいと思います。
MainWindow.XAMLのControlTemplateオーバーライドでPART_ListBoxをオーバーライドする方法があると思いましたか?
編集:最終溶液、おかげで、AutoCompleteTextBox.csで
をMM8タイプの依存性を作成するためのICommand:SetResultText方法において
public const string AutoCompleteSelectionChangedPropertyName = "AutoCompleteSelectionChangedCommand";
public ICommand AutoCompleteSelectionChangedCommand
{
get { return (ICommand) GetValue(AutoCompleteSelectionChangedProperty); }
set { SetValue(AutoCompleteSelectionChangedProperty, value);}
}
public static readonly DependencyProperty AutoCompleteSelectionChangedProperty = DependencyProperty.Register(
AutoCompleteSelectionChangedPropertyName,
typeof(ICommand),
typeof(AutoCompleteTextBox));
:
AutoCompleteSelectionChangedCommand?.Execute(autoCompleteQueryResult);
表示/表示モデル使用:
<ac:AutoCompleteTextBox Name="AutoComplete"
AutoCompleteQueryResultProvider="{Binding AutoCompleteQueryResultProvider}"
FontSize="12"
AutoCompleteSelectionChangedCommand="{Binding CommandEditValueChanged}">
</ac:AutoCompleteTextBox>
public ICommand CommandEditValueChanged { get; set; }
public MainWindowViewModel(){
CommandEditValueChanged = new DelegateCommand<object>(OnEditValueChanged);
}
private void OnEditValueChanged(object result){
// do stuff
}
これまでのところ、私はビューコードの背後にコードを書かずにいましたが、私はXAMLでこれにフックする方法があると確信していますが、PART_ListBoxの一部をオーバーライドする構文がわかりません – Jack
PART_ListBoxの*いくつかの*またはAutoCompleteTextBoxのコントロールテンプレートの一部をオーバーライドできませんコントロール。コントロールテンプレート全体を再定義する必要があります。 – mm8
または、ビューのコードビハインドからコードを添付のビヘイビアに移動できます。私の編集された答えを見てください。 – mm8