使用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