2017-07-31 96 views
1

我試圖從代碼中填充組合框,而不是在XAML上定義值。但是,無論我嘗試綁定方法還是從列表中設置它們,我似乎都無法使其工作。從代碼填充UWP Combobox

下面的類

public class Quote 
    { 
     public int Value; 
     public string DisplayValue; 
    } 

而下面的觀察集合

public ObservableCollection<Quote> QuoteCollection 
    { 
     get 
     { 
      return new ObservableCollection<Quote> 
      { 
       new Quote{ DisplayValue = "6", Value = 6 }, 
       new Quote{ DisplayValue = "12", Value = 12 }, 
       new Quote{ DisplayValue = "18", Value = 18 }, 
       new Quote{ DisplayValue = "24", Value = 24 }, 
       new Quote{ DisplayValue = "30", Value = 30 }, 
       new Quote{ DisplayValue = "36", Value = 36 }, 
       new Quote{ DisplayValue = "42", Value = 42 }, 
       new Quote{ DisplayValue = "48", Value = 48 }, 
       new Quote{ DisplayValue = "54", Value = 54 }, 
       new Quote{ DisplayValue = "60", Value = 60 } 
      }; 
     } 
    } 

我似乎無法得到它的工作,似乎沒有什麼,當我綁定像這樣的情況發生:

<local:ExtendedComboBox x:Name="quotes" ItemsSource="{Binding QuoteCollection}" DisplayMemberPath="DisplayValue"/> 

而當我嘗試從這樣的集合列表中添加它:

 quotes.ItemsSource = new List<Quote> 
     { 
      new Quote{ DisplayValue = "6", Value = 6 }, 
      new Quote{ DisplayValue = "12", Value = 12 }, 
      new Quote{ DisplayValue = "18", Value = 18 }, 
      new Quote{ DisplayValue = "24", Value = 24 }, 
      new Quote{ DisplayValue = "30", Value = 30 }, 
      new Quote{ DisplayValue = "36", Value = 36 }, 
      new Quote{ DisplayValue = "42", Value = 42 }, 
      new Quote{ DisplayValue = "48", Value = 48 }, 
      new Quote{ DisplayValue = "54", Value = 54 }, 
      new Quote{ DisplayValue = "60", Value = 60 } 
     }; 

Combobox似乎充滿了一些東西,但所有的選項都是空白的。

ExtendedComboBox直接取自here,兩種解決方案取自here

回答

2

您的綁定屬性是常規屬性,但沒有getter和setter。所以你需要將你的課程改爲下面。

public class Quote 
{ 
    public int Value { get; set; } 
    public string DisplayValue { get; set; } 
} 

我沒有測試這個,但它應該解決這個問題。

+0

它仍然沒有顯示任何東西。我只是通過將ItemsSource分配給列表,然後在需要使用它時將值轉換爲int32來「解決它」。 – user8296390

+1

@ user8296390這是你在那裏做的一些糟糕的黑客攻擊。你可觀察的收集方式是有問題的,因爲你總是返回一個新的實例。如果你像最近一樣手動設置項目源,這個答案應該可以工作。 –

0

除了來自AVK的Getter和Setter聲明建議外,還需要確保Page.DataContext已正確設置。

例如,構造方法:

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.DataContext = this; //Here 
} 

收藏:

public ObservableCollection<Quote> QuoteCollection 
{ 
      get 
      { 
       return new ObservableCollection<Quote> 
      { 
       new Quote{ DisplayValue = "6", Value = 6 }, 
       new Quote{ DisplayValue = "12", Value = 12 }, 
       new Quote{ DisplayValue = "18", Value = 18 }, 
       new Quote{ DisplayValue = "24", Value = 24 }, 
       new Quote{ DisplayValue = "30", Value = 30 }, 
       new Quote{ DisplayValue = "36", Value = 36 }, 
       new Quote{ DisplayValue = "42", Value = 42 }, 
       new Quote{ DisplayValue = "48", Value = 48 }, 
       new Quote{ DisplayValue = "54", Value = 54 }, 
       new Quote{ DisplayValue = "60", Value = 60 } 
      }; 
      } 
} 

自定義類:

public class Quote 
{ 
      public int Value { get; set; } 
      public string DisplayValue { get; set; } 
}