数据绑定到组合框c+时SelectedValue、SelectedIndex出现问题+/cx XAML Metro应用程序
在下面的代码中如何使用组合框的选定元素的值 C++:数据绑定到组合框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
名称空间测试
{
[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::ArraySelectedIndex="{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}"