2017-02-09 4 views
0

Так что я пытаюсь связать выпадающий список с вектором myclass. myclass имеет общедоступную платформу :: String^свойство называется key. Таким образом, в моем XAML у меня есть displaymemberpath для параметра combobox, установленного в «key». Тем не менее, я просто получаю коробку пустых опций, что является таким же результатом, как если бы я установил displaymemberpath в «asdf» (несуществующее свойство). Чтобы проиллюстрировать мою проблему, я попытался переписать этот учебник по использованию displaymemberpath в C++/CX: https://asp-net-example.blogspot.com/2017/01/uwp-combobox-displaymemberpath-and.html (я попытался выполнить оригинальный учебник на C#, и он отлично работал).Как использовать displaymemberpath в combobox в UWP C++/CX?

Вот мой код:

(MainPage.xaml точно так же, как и в учебнике).

<Page 
    x:Class="displaymembercxxtest.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:displaymembercxxtest" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <StackPanel 
     x:Name="stack_panel1" 
     Orientation="Horizontal" 
     Background="LightYellow" 
     Padding="100" 
     > 
     <ComboBox 
      x:Name="ComboBox1" 
      Header="Select A Color" 
      DisplayMemberPath="ColorName" 
      SelectedValuePath="ColorValue" 
      SelectionChanged="ComboBox1_SelectionChanged" 
      > 
     </ComboBox> 
     <TextBlock 
      x:Name="TextBlock1" 
      FontFamily="Consolas" 
      FontSize="25" 
      Foreground="DarkGreen" 
      Margin="50,5,5,5" 
      /> 
    </StackPanel> 

</Page> 

Код За:

//MainPage.xaml.h 
namespace displaymembercxxtest 
{ 
    /// <summary> 
    /// An empty page that can be used on its own or navigated to within a Frame. 
    /// </summary> 
    public ref class MainPage sealed 
    { 
    public: 
     MainPage(); 

    private: 
     void ComboBox1_SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e); 
    }; 
    public ref class color sealed 
    { 
    public: 
     property Platform::String^ ColorName; 
     property Platform::String^ ColorValue; 
     color(Platform::String^ name, Platform::String^ value) 
     { 
      ColorName = name; 
      ColorValue = value; 
     } 

    }; 
} 

//MainPage.xaml.cpp

MainPage::MainPage() 
{ 
    InitializeComponent(); 
    Platform::Collections::Vector<color^>^ colors = ref new Platform::Collections::Vector<color^>(); 
    colors->Append(ref new color("INDIANRED", "#CD5C5C")); 
    colors->Append(ref new color("SALMON", "#FA8072")); 
    colors->Append(ref new color("CRIMSON", "#DC143C")); 
    colors->Append(ref new color("DEEPPINK", "#FF1493")); 
    colors->Append(ref new color("CORAL", "#FF7F50")); 
    colors->Append(ref new color("ORANGE", "#FFA500")); 
    colors->Append(ref new color("YELLOW", "#FFFF00")); 
    colors->Append(ref new color("PEACHPUFF", "#FFDAB9")); 
    ComboBox1->ItemsSource = colors; 
} 


void displaymembercxxtest::MainPage::ComboBox1_SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e) 
{ 
    // not relevant to the problem 
} 

Вот что я вижу: enter image description here

Вот то, что это выглядит, когда я построил учебник в C#:

enter image description here

Как вы можете видеть, варианты заготовки в версии C++/CX. Что я делаю не так?

+0

Код XAML является релевантным. Он должен уйти в ваш вопрос. – IInspectable

+0

Как я уже сказал, он в основном скопирован и вставлен из учебника. Я добавил его, хотя выше MainPage.xaml.h – justanotherxl

ответ

0

Если вы используете {Binding}, вам нужно добавить атрибут BindableAttribute в класс цвета.

Пожалуйста, проверьте следующий код:

[Windows::UI::Xaml::Data::Bindable] 
public ref class color sealed 
{ 
public: 
    property Platform::String^ ColorName; 
    property Platform::String^ ColorValue; 
    color(Platform::String^ name, Platform::String^ value) 
    { 
     ColorName = name; 
     ColorValue = value; 
    } 
}; 

Больше информации, пожалуйста, прочитайте Data binding overview документацию.

+0

Это сработало, спасибо. Является ли свойство displaymembersource в основном использованием {Binding} за кулисами или чем-то еще? Этот тег необходим для {x: Bind}? – justanotherxl

Смежные вопросы