Windows 8リリースプレビュー(最新のパッチがインストールされている)を使用しているWinRT / C#XAMLMetroアプリで奇妙な問題が発生しました。を使用してい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="Test Item 2"
は表示されず、ComboBox
は空のままになります。ブレークポイントを設定することで、ビューのを設定したときに、バインドされた値MyItemsSource
とMySelectedValue
がビューモデルから正しく取得されることに気付きDataContext
ました。このアクションの後、ComboBox.SelectedValue
プロパティは実際にはに設定されますが、表示され"Test Item 2"
ません。また、UIでユーザーアクションによってComboBoxで選択された値を変更すると、変更された値がComboBoxに表示され、それに応じてモデルの表示プロパティが更新されることに気付きました。MySelectedValue
したがって、ビューモデルプロパティの最初の視覚化を除いて、すべてが正常に機能しているように見えます。私はそれについて本当に必死になっています...
DisplayMemberPath
これが最も単純な例ですが、元の場所では、エンティティ全体をComboBox、設定、およびにバインドしたいと思いましたSelectedValuePath
。残念ながら、同じ問題が発生します。