数据绑定到组合框c+时SelectedValue、SelectedIndex出现问题+/cx XAML Metro应用程序

数据绑定到组合框c+时SelectedValue、SelectedIndex出现问题+/cx XAML Metro应用程序,xaml,data-binding,combobox,microsoft-metro,c++-cx,Xaml,Data Binding,Combobox,Microsoft Metro,C++ Cx,在下面的代码中如何使用组合框的选定元素的值 C++: 名称空间测试 { [Windows::UI::Xaml::Data::Bindable] 已密封的公共引用类包装:Windows::UI::Xaml::Data::INotifyPropertyChanged { 公众: 包装器() { //应用程序启动时组合框中选定元素的索引 m_selectedElement=2; m_myStringArray=ref新平台::集合::向量(3); //组合框列表中的1、2和4 m_myStringAr

在下面的代码中如何使用组合框的选定元素的值

C++:

名称空间测试
{
[Windows::UI::Xaml::Data::Bindable]
已密封的公共引用类包装:Windows::UI::Xaml::Data::INotifyPropertyChanged
{
公众:
包装器()
{
//应用程序启动时组合框中选定元素的索引
m_selectedElement=2;
m_myStringArray=ref新平台::集合::向量(3);
//组合框列表中的1、2和4
m_myStringArray->SetAt(0,1);
m_myStringArray->SetAt(1,2);
m_myStringArray->SetAt(2,4);
}
虚拟事件窗口::UI::Xaml::数据::PropertyChangedEventHandler ^PropertyChanged;
属性Windows::Foundation::Collections::IVector^MyStringArray
{
Windows::Foundation::Collections::IVector^get(){return m_myStringArray;}
}
属性int SelectedElement
{
int get(){return m_selectedElement;}
无效集(int值){m_selectedElement=value;RaisePropertyChanged(“selectedElement”);}
}
受保护的:
void RaisePropertyChanged(平台::字符串^propertyName)
{
PropertyChanged(此,参考新Windows::UI::Xaml::Data::PropertyChangedEventArgs(propertyName));
}
私人:
平台::集合::向量^m_mystringaray;
int m_selectedElement;
};
}
XAML:


我测试了其他绑定,它们工作正常。我正在正确设置DataContext。 构造函数中的m_selectedElement=2将组合框中的选定元素设置为列表中的第三个元素。SelectedElement属性的get()方法被调用,但set()方法没有。我通过放置一个断点来检查这一点。我做错了什么

另外,是否可以将Platform::Array^绑定到组合框? 我尝试过使用Platform::Array^^和Platform::Array^,但无法正常工作。STL容器也不起作用。还有哪些可能的容器可以绑定到组合框?

更改

SelectedIndex="{Binding Path=SelectedElement}" 

如果希望UI更新ViewModel,则需要双向绑定


只能在绑定(ref类/结构、枚举类)中使用WinRT组件。当将Platform::Collections::Vector用于绑定时,使用它通常是正确的选择,特别是因为它还实现了IObservableVector。STL集装箱无法工作,因为它们无法穿越ABI。

谢谢。成功了。我做了其他绑定测试,它们都是双向的,我没有指定模式,所以我假设TwoWay是隐式的。不,在WinRT中绑定不是隐式的TwoWay。它们都默认为单向。你确定你的绑定测试是双向的吗?此外,如果答案有效,惯例是通过单击答案左侧的大复选框来接受它。不,你是对的。我不是两方面都有约束力。当我单击按钮时,我正在更改属性。我也不知道支票的事。。。我的第一个问题。我也会投赞成票,但没有声誉。谢谢
<TextBlock HorizontalAlignment="Left" 
           Height="73" Margin="50,436,0,0" 
           TextWrapping="Wrap" 
           Text="{Binding Path=SelectedElement}" 
           VerticalAlignment="Top" 
           Width="200"/>
<ComboBox ItemsSource="{Binding Path=MyStringArray}" 
          SelectedIndex="{Binding Path=SelectedElement}"  
          HorizontalAlignment="Left" 
          Height="50" Margin="369,50,0,0" 
          VerticalAlignment="Top" Width="286"/>
SelectedIndex="{Binding Path=SelectedElement}" 
SelectedIndex="{Binding Path=SelectedElement, Mode=TwoWay}"