2017-07-31 94 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; } 
}