Я пытаюсь реализовать пример по адресу:Привязать к событию в рамках таможенного контроля
https://github.com/olohmann/WpfRxControls
Есть три части таможенного контроля:
PART_TextBox
PART_Popup
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 не просматривать код позади. До сих пор все образы кода выглядят пустыми, и я хотел бы сохранить их таким образом.
Я думал, что есть какой-то способ переопределить PART_ListBox в переопределении ControlTemplate в MainWindow.XAML?
Edit: Окончательное решение, благодаря MM8
В разделе AutoCompleteTextBox.cs, создать свойство зависимостей типа ICommand:
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));
В методе SetResultText:
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
}
До сих пор я остался подальше от написания кода в виде кода позади, m Конечно, есть способ подключиться к этому в XAML, но я не уверен, что синтаксис должен переопределить некоторые из PART_ListBox. – Jack
Вы не можете переопределить * некоторые * из PART_ListBox или какую-либо часть шаблона управления AutoCompleteTextBox контроль. Затем вам придется переопределить весь шаблон управления. – mm8
Или можно переместить код с кодового обозначения представления в прикрепленное поведение. См. Мой отредактированный ответ. – mm8