2016-05-20 4 views
0

私のWindowsユニバーサルプロジェクトでは、タイムエントリのコンボボックスがあります。三つのコンボボックスは、私は最終的に私のフォームの両方が設定できるようにしたいどのように気づくと「表示(...ここWindowsユニバーサルアプリケーションのコンボボックスバインド

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <ComboBox SelectedItem="{Binding Hour, Mode=TwoWay}" ItemsSource="{Binding HourList}"></ComboBox> 
    <ComboBox SelectedItem="{Binding Minute, Mode=TwoWay}" ItemsSource="{Binding MinuteList}"></ComboBox> 
    <ComboBox SelectedItem="{Binding Second, Mode=TwoWay}" ItemsSource="{Binding SecondList}"></ComboBox> 
</StackPanel> 

は私のViewModelにある...時、分、私のViewModelで第二のプロパティにバインドされていますタイム」プロパティ)....

public class TimeEntryViewModel : INotifyPropertyChanged 
{ 
    public bool Accept { get; set; } 

    public TimeEntryViewModel(DateTime time) 
    { 
     Time = time; 
     HourList = new ObservableCollection<string> { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }; 
     MinuteList = new ObservableCollection<string> { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59" }; 
     SecondList = new ObservableCollection<string> { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59" }; 
    } 

    public ObservableCollection<string> HourList { get; set; } 
    public ObservableCollection<string> MinuteList { get; set; } 
    public ObservableCollection<string> SecondList { get; set; } 

    private string _hour; 
    public string Hour { 
     get { return _hour; } 
     set 
     { 
      _hour = value; 
      OnPropertyChanged("Hour"); 
     } 
    } 

    private string _minute; 
    public string Minute 
    { 
     get { return _minute; } 
     set 
     { 
      _minute = value; 
      OnPropertyChanged("Minute"); 
     } 
    } 
    private string _second; 
    public string Second 
    { 
     get { return _second; } 
     set 
     { 
      _second = value; 
      OnPropertyChanged("Second"); 
     } 
    } 

    public DateTime Time 
    { 
     get 
     { 
      return new DateTime(DateTime.Now.Year, 
       DateTime.Now.Month, 
       DateTime.Now.Day, 
       int.Parse(_hour), int.Parse(_minute), int.Parse(_second)); 
     } 
     set 
     { 
      Hour = value.Hour.ToString("00"); 
      Minute = value.Minute.ToString("00"); 
      Second = value.Second.ToString("00"); 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion 
} 

問題は、私は私のViewModelに、コンボは自動的に時間を選択していない、分、秒で有効時間を設定していたとしても、私は最初のページを表示したときということです私が期待するように。彼らは値を表示しているだけで、私がそれらをドロップダウンすると、項目は選択されません。代わりにObservableCollections intをベースにしてみましたが、同じ結果が得られました。私はここで何が欠けていますか?

答えて

2

問題ItemsSourceを設定する前に、まずSelectedItemを設定しています。あなたはそれが問題ではないと思うかもしれませんが、残念ながら、そうです。 Hereなぜそれが説明されます。

にコードを変更し

<StackPanel Orientation="Horizontal" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center"> 
    <ComboBox ItemsSource="{Binding HourList}" 
       SelectedItem="{Binding Hour, Mode=TwoWay}"></ComboBox> 
    <ComboBox ItemsSource="{Binding MinuteList}" 
       SelectedItem="{Binding Minute, Mode=TwoWay}"></ComboBox> 
    <ComboBox ItemsSource="{Binding SecondList}" 
       SelectedItem="{Binding Second, Mode=TwoWay}"></ComboBox> 
</StackPanel> 
0

ObservableCollectionsの初期化後にTimeを設定してみてください。 Timeが設定されている場合、コンボボックスには何もないので、私はそれがだと思います。

+0

私はそれを試してみましたが、それはまだ私は怖い動作しません。 –

関連する問題