如何使用组合框绑定数据
本文关键字:绑定 数据 组合 何使用 | 更新日期: 2023-09-27 18:25:34
我需要知道如何以最简单的形式将数据(字符串列表)绑定到XAML中的组合框,而不使用代码后面的ComboBox.ItemSource=object。
我的意思是:
{Binding Path="What Comes here"}
假设我有:
class Window1 : UserControl {
List<String> list = new List<String>();// And assign Value to this list
...}
我试过
{Binding Path=list} or {Binding list}
但没有任何约束。那么应该如何做呢?(我无法访问代码后面的这个组合框,因为Microsoft已将SilverLight DatGrid限制到我无法访问的程度)
很少有绑定规则可以正常工作:
- 只能绑定公共属性(至少对于实例对象),而不能绑定字段
- Be默认绑定引擎在应用绑定的控件的DataContext中查找属性路径
- 如果要绑定到DataContext中不存在的属性(或者DataContext未设置为控制),请使用RelativeSource标记扩展来指导绑定引擎解析属性路径
回到你的问题陈述,你需要绑定到代码背后创建的列表,你必须对代码进行以下更改:
// Not sure why you termed it as Window1 if it's actually an UserControl.
public partial class Window1 : UserControl
{
public Window1()
{
InitializeComponent();
MyStrings = new List<string>(new[] { "A", "B", "C", "D" });
DataContext = this; // Rule #2
}
public List<string> MyStrings { get; set; } // Rule #1
}
XAML:
<ComboBox ItemsSource="{Binding MyStrings}"/>
如果您没有在UserControl的构造函数中设置DataContext,并且仍然希望绑定到属性,请使用RelativeSource(规则#3)进行绑定
<ComboBox ItemsSource="{Binding MyStrings, RelativeSource={RelativeSource FindAncestor
, AncestorType=UserControl}}"/>
附加积分
- 如果您希望在初始化后向列表中添加更多项目并希望UI相应更新,请使用
ObservableCollection<string>
代替List<string>
- 点击此处阅读有关MVVM的更多信息-了解MVVM模式的基本知识。通常,所有绑定内容都保留在单独的类ViewModel中,这样就可以在不依赖UI内容的情况下对其进行测试
看看这里:模型视图视图模型(MVVM)解释
我不是SilverLight的开发人员,但据我所知,这只是完整wpf的一个精简版本。
尝试使用ViewModel并在其中定义您的列表。然后您可以将ComboBox.ItemsSource
属性绑定到它:
public class SomeViewModel : INotifyPropertyChanged
{
private ObservableCollection<string> listOfAwesomeStrings;
public ObservableCollection<string> ListOfAwesomeStrings
{
get { return listOfAwesomeStrings; }
set
{
if (value.Equals(listOfAwesomeStrings))
{
return;
}
listOfAwesomeStrings= value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这样设置视图的DataContext
,并填写您的列表:
var viewModel = new SomeViewModel();
viewModel.ListOfAwesomeStrings = new ObservableCollection<string>();
viewModel.ListOfAwesomeStrings.Add("Option 1");
viewModel.ListOfAwesomeStrings.Add("Option 2");
viewModel.ListOfAwesomeStrings.Add("Option 3");
this.DataContext = viewModel;
最后在xaml:中绑定到您的属性
<ComboBox ItemsSource="{Binding ListOfAwesomeStrings}" />