我的WinRT / C#XAML Metro应用程序中有一个奇怪的问题,使用
Windows 8 Release Preview(安装了最新的补丁).我正在使用一个ComboBox,它的值ItemsSource和SelectedValue与viewmodel中的属性绑定:
<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 =“测试项目2”不显示,ComboBox为空.通过设置断点,我注意到,当我设置视图的DataContext时,绑定值MyItemsSource和MySelectedValue是从视图模型中获取的.此操作后,ComboBox.SelectedValue属性实际上设置为“测试项目2”,但它不显示!另外我注意到,当我通过用户操作在UI上更改ComboBox中的选定值时,更改的值显示在ComboBox中,View Model属性将相应更新.所以一切似乎都可以正常工作,除了MySelectedValue View Model属性的初始可视化.我变得真的绝望了…
现在这是最简单的例子,原来我想将整个实体绑定到ComboBox,设置displayMemberPath和SelectedValuePath.不幸的是,发生同样的问题.
我在我的例子中发现了这个问题:在XAML标记中,我已经在ItemsSource属性之前定义了SelectedValue属性.如果我以这种方式交换两个定义,它的作用是:
<ComboBox ItemsSource="{Binding MyItemsSource,Mode=OneWay}" SelectedValue="{Binding MySelectedValue,Mode=TwoWay}" Width="200" Height="30" />
这真是奇怪而烦人.现在我想知道:这是一个bug还是设计?我认为这是一个错误,因为控制应该是工作,而不管XAML中定义的属性的顺序.
原文地址:https://www.jb51.cc/windows/364131.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。