Windows 8 Release Preview(最新のパッチがインストールされています)を使用して、WinRT/C#XAML Metroアプリで奇妙な問題が発生しました。私は、その値がItemsSource
とSelectedValue
のViewModelのプロパティにバインドされているComboBox
を、使用しています:背後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
が、ビューモデルからcorectly取得されていることがわかりました。この操作の後、ComboBox.SelectedValue
プロパティは実際には"Test Item 2"
に設定されますが、表示されません。また、UI上のユーザーアクションによってComboBoxで選択した値を変更すると、変更された値がComboBoxに表示され、それに応じてView Modelプロパティが更新されることに気付きました。だから、MySelectedValue
View Modelプロパティの最初の視覚化を除いて、すべてがうまくいくようです。私はそれについて本当に必死になっています...
これは最も簡単な例ですが、原点では、コンボボックス全体にバインドし、DisplayMemberPath
とSelectedValuePath
と設定したいと考えていました。残念ながら、同じ問題が発生します。
あなたのための仕事ですか? –
'selectedValue = itemsSource [1]'のように、selectedValueに「新しい文字列」を割り当てるのではなく、コレクションから実際の要素を取得すると問題は解決しませんか? – Patrick