WPF: как связать мою коллекцию с разных страниц

То, что вы ищете, это указатель на (виртуальную) функцию-член . Обратите внимание, что такой указатель не является адресом функции, но обычно является смещением внутри vtable, так как фактическая вызываемая функция зависит от реального типа объекта. Вы даже не можете указать этот указатель на void*, представление определено реализацией. Это также означает, что вы не можете найти адрес фактической функции, которая будет вызываться общим способом .

Если вам действительно нужно знать целевую функцию для вызова, возможно, вы было бы лучше, используя несколько отдельных функций и enum?

В любом случае, если вы просто хотите, чтобы вы могли вызвать функцию виртуального члена через указатель, вы можете сделать что-то вроде этого:

void someOtherFunction(Base* pb)
{
    using func_t = void(Base::*)(); // Type of a pointer to member function of
                                    // signature void() and object type Base
    func_t fn = &Base::method1; // Take the address of the function
    (pb->*fn)(); // Call it. Note the extra parenthesis and the operator: ->*
                 // The actual function called depends on the actual type of pb,
                 // it can be Derived1::f() or Derived2::f() in the example code you have
}

-2
задан user979033 19 January 2019 в 06:06
поделиться

1 ответ

DataContext в MainWindow не является DataContext в Page в Frame. Вы можете установить DataContext фрейма программно, хотя:

Page в Frame автоматически не наследует DataContext из MainWindow, но вы можете установить его свойство DataContext когда вы загружаете Page:

Home home = new Home();
home.DataContext = viewModel;
MyFrame.Content = home;
0
ответ дан mm8 19 January 2019 в 06:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: