使用Windows 8 Release Preview(已安装最新的修补程序),我的WinRT/C#XAML Metro应用程序出现了一个奇怪的问题。我使用的是ComboBox
,其值ItemsSource
和SelectedValue
必然属性在视图模型:ComboBox SelectedValue不显示
<ComboBox SelectedValue="{Binding MySelectedValue, Mode=TwoWay}"
ItemsSource="{Binding MyItemsSource, Mode=OneWay}"
Width="200" Height="30" />
后面的代码:
public MainPage()
{
this.InitializeComponent();
DataContext = new TestViewModel();
}
而且TestViewModel
的一个非常简单的定义,使用字符串:
public class TestViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private IEnumerable<string> _myItemsSource = new List<string>
{
"Test Item 1",
"Test Item 2",
"Test Item 3"
};
public IEnumerable<string> MyItemsSource
{
get { return _myItemsSource; }
}
private string _mySelectedValue = "Test Item 2";
public string MySelectedValue
{
get { return _mySelectedValue; }
set
{
_mySelectedValue = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("MySelectedValue"));
}
}
}
}
现在我认为这个简单的解决方案应该只是工作......但是当我启动应用程序时,SelectedValue="Test Item 2"
不显示,ComboBox
留空。通过设置断点,我注意到当我设置视图的DataContext
时,从视图模型中正确检索了绑定值MyItemsSource
和MySelectedValue
。在此操作之后,ComboBox.SelectedValue
属性实际上设置为"Test Item 2"
,但它只是不显示!另外我注意到,当我通过用户界面上的用户操作更改组合框中的选定值时,更改后的值显示在组合框中,并且视图模型属性也会相应更新。因此除了最初的可视化模型属性MySelectedValue
以外,一切看起来都很好。我正变得非常绝望...
现在,虽然这是最简单的例子,但在起源中,我想将整个实体绑定到ComboBox,设置DisplayMemberPath
和SelectedValuePath
。不幸的是,同样的问题发生。
是你的工作? – 2012-07-14 09:48:33
如果您从集合中获取实际元素,而不是像'selectedValue = itemsSource [1]'中那样将“新字符串”分配给selectedValue,问题是否会持续存在? – Patrick 2012-07-14 09:50:41