好吧标题可能没多大帮助,但这是我的问题。我在SILVERLIGHT中控件之间绑定属性时遇到问题。结构如下:
上下文:“ProjectWindow”窗口包含一个“ProjectList”控件,ProjectWindow的依赖属性“Nombres”和依赖属性“ListOfNames”之间存在绑定,这里是“ListOfNames”依赖属性的代码:< / p>
public static DependencyProperty ListOfNamesProperty =
DependencyProperty.Register("ListOfNames", typeof(string[]), typeof(ProjectList), new PropertyMetadata(null));
public string[] ListOfNames
{
get
{
return (string[])GetValue(ListOfNamesProperty);
}
set
{
SetValue(ListOfNamesProperty, value);
List<ProjectItemList> auxList = new List<ProjectItemList>();
foreach (string s in value)
{
ProjectItemList il = new ProjectItemList();
il.Nombre = s;
this.lb_projects.Items.Add(il);
}
}
}
问题在于,虽然“ProjectList”中的列表控件代表“Nombres”属性,但“ListOfNames”的“Set”永远不会被调用,所以我无法创建每个“ProjectItemList”对象并表示数据。
我是XAML和Silverlight的新手,所以我可能不会考虑简单的事情。
谢谢!
答案 0 :(得分:1)
当您使用依赖项属性时,不会通过ui绑定调用set和get,这是您的问题。 WPF ui使用dependeny属性直接控制tald,而不通过你的getter和setter。
答案 1 :(得分:0)
您需要指定一个回调来监控属性更改:
public static DependencyProperty ListOfNamesProperty =
DependencyProperty.Register("ListOfNames", typeof(string[]), typeof(ProjectList),
new PropertyMetadata(ListOfNamesChaned));
private static void ListOfNamesChaned(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
List<ProjectItemList> auxList = new List<ProjectItemList>();
foreach (string s in value)
{
ProjectItemList il = new ProjectItemList();
il.Nombre = s;
this.lb_projects.Items.Add(il);
}
}
public string[] ListOfNames
{
get
{
return (string[])GetValue(ListOfNamesProperty);
}
set
{
SetValue(ListOfNamesProperty, value);
}
}
见 Chen Kinnrot 的答案,知道原因。
答案 2 :(得分:0)
为此,可以使用Raise Property Change事件,即propertychanged事件处理程序,Code snippet就像:
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
使用OnPropertyChanged绑定属性,如果该属性中的任何更改将通知,您的绑定属性将自动更改,并且将更新绑定到这些属性的ui。