WinUI 3 C++:ComboBoxItem的IInspectable内容ToString()无法调用
解决方案
要让ComboBox正确显示自定义IInspectable对象的文本,有两种可行方案:
方案一:实现IStringable接口
WinRT控件(包括ComboBox)在获取对象的显示文本时,会调用IStringable接口的ToString方法,而非C++类的成员函数。你的自定义类仅实现了IInspectable,因此控件无法触发文本获取逻辑。
修改代码如下:
class ComboboxItem : public winrt::implements<ComboboxItem, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IStringable> { public: ComboboxItem() : m_text(L"Hello") {} hstring Text() { return m_text; } void Text(hstring const& value) { m_text = value; } winrt::Windows::Foundation::IInspectable Value() { return m_value; } void Value(winrt::Windows::Foundation::IInspectable const& value) { m_value = value; } // 实现IStringable的ToString方法 hstring ToString() const override { return m_text; } private: hstring m_text; winrt::Windows::Foundation::IInspectable m_value; };
方案二:设置ComboBox的DisplayMemberPath
如果不想额外实现接口,可以直接指定ComboBox从自定义对象的Text属性读取显示文本:
comboxBox.DisplayMemberPath(L"Text"); comboxBox.Items().Append(winrt::make<ComboboxItem>());
两种方法都能让ComboBox正常显示"Hello"文本。
内容的提问来源于stack exchange,提问作者Stevo
相关产品推荐
相关产品推荐

