2008-11-30 61 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