2008-11-30 50 views
3

我刚开始使用Silverlight。我想在UI上显示消息列表,但数据绑定不适合我。Silverlight 2.0 - 将域对象数据绑定到UserControl

我有一个消息类别:

public class Message 
{ 
    public string Text { get; set; } 
    ... 
} 

我有一个消息依赖属性的消息显示的Silverlight用户控制:

public partial class MessageDisplay : UserControl 
{ 
    public static readonly DependencyProperty MessageProperty = 
     DependencyProperty.Register("Message", typeof(Message), 
      typeof(MessageDisplay), null); 

    public MessageDisplay() 
    { 
     InitializeComponent(); 
    } 

    public Message Message 
    { 
     get 
     { 
      return (Message)this.GetValue(MessageProperty); 
     } 

     set 
     { 
      this.SetValue(MessageProperty, value); 
      this.DisplayMessage(value); 
     } 
    } 

    private void DisplayMessage(Message message) 
    { 
     if (message == null) 
     { 
      this.MessageDisplayText.Text = string.Empty; 
     } 
     else 
     { 
      this.MessageDisplayText.Text = message.Text;     
     } 
    } 
} 

}

然后,在主控制XAML我有

<ListBox x:Name="MessagesList" Style="{StaticResource MessagesListBoxStyle}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Silverbox:MessageDisplay Message="{Binding}"></Silverbox:MessageDisplay> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox 

我绑定在control.xaml.cs代码:

this.MessagesList.SelectedIndex = -1; 
    this.MessagesList.ItemsSource = this.messages; 

数据绑定不提供任何错误,它似乎有列表中的项目的正确数目,但在MessageDisplay的Message属性settor一个断点从未打过,并且该消息永远不会正确显示。

我错过了什么?

回答

3

您的消息属性可能是由绕过您的实际消息属性(而不是依赖项)的数据绑定设置的。要解决此问题,请在该属性上添加PropertyChangedCallback。

public static readonly DependencyProperty MessageProperty = 
    DependencyProperty.Register("Message", typeof(Message), typeof(MessageDisplay), 
    new PropertyMetadata(
    new PropertyChangedCallback(MessageDisplay.MessagePropertyChanged)); 


public static void MessagePropertyChanged(DependencyObject obj, DependecyPropertyChangedEventArgs e) 
{ 
    ((MessageDisplay)obj).Message = (Message)e.NewValue; 
} 
  1. PropertyMetadata
  2. PropertyChangedCallback
+0

这就行了,谢谢。 – Anthony 2008-11-30 16:22:49