我需要以最简单的形式知道如何将数据(字符串列表)绑定到 XAML 中的一个ComboBox ,而不使用< 代码中的strong> 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限制在某种程度,我无法做到这一点)
答案 0 :(得分:1)
绑定工作正常的规则很少:
回到您需要绑定到后面代码中创建的List的问题陈述,您必须对代码进行以下更改:
// 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并仍想绑定到property,请使用RelativeSource 绑定(规则#3)
<ComboBox ItemsSource="{Binding MyStrings, RelativeSource={RelativeSource FindAncestor
, AncestorType=UserControl}}"/>
其他要点
ObservableCollection<string>
代替List<string>
。答案 1 :(得分:-1)
请查看此处:Model-View-ViewModel (MVVM) Explained
我不是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}" />