1

好吧,标题可能没有多大帮助,但这是我的问题。我在 SILVERLIGHT 中的控件之间绑定属性时遇到问题。这是结构:

  1. 有一个名为“ProjectItemList”的控件,该控件将接收一个字符串并以非常简单的方式显示它。
  2. 有一个名为“ProjectList”的控件,该控件将接收一个字符串数组,并使用控件“ProjectItemList”来表示数组中的每个字符串。
  3. 有一个名为“ProjectWindow”的窗口,该窗口包含一个“ProjectList”控件和一个名为“Nombres”的依赖属性。

上下文:“ProjectWindow”窗口包含一个“ProjectList”控件,ProjectWindow的依赖属性“Nombres”和依赖属性“ListOfNames”之间有一个绑定,这里是“ListOfNames”依赖属性的代码:

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 还很陌生,所以我可能不会考虑一些简单的事情。

谢谢!

4

3 回答 3

1

当您使用依赖属性时,set 和 get 不会通过 ui 绑定调用,这是您的问题。WPF ui 控件直接使用dependeny 属性,无需通过您的getter 和setter。

于 2013-03-07T23:25:58.907 回答
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的回答以了解原因。

于 2013-03-07T23:39:47.670 回答
0

为此,可以使用 Raise Property Change 事件,即与 propertychanged 事件处理程序一起使用,代码片段如下:

            public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

使用 OnPropertyChanged 绑定属性,如果该属性有任何更改。它将通知您的绑定属性将自动更改,并且将更新绑定到这些属性的 ui。

于 2013-11-26T08:32:43.983 回答