Silverlight 2.0 - 将域对象数据绑定(bind)到 UserControl

标签 silverlight data-binding xaml

我开始使用 Silverlight。我想在 UI 上显示消息列表,但数据绑定(bind)对我不起作用。

我有一个消息类:

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 代码中绑定(bind):

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

数据绑定(bind)没有报错,列表中的项数似乎正确,但是 MessageDisplay 的 Message 属性 setter 中的断点从未命中,消息也从未正确显示。

我错过了什么?

最佳答案

您的 Message 属性可能是由数据绑定(bind)设置的,它绕过了您的实际 Message 属性(不是依赖项)。要解决此问题,请在该属性上添加一个 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

关于Silverlight 2.0 - 将域对象数据绑定(bind)到 UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328906/

相关文章:

c# - 在 WPF 中使用 CollectionView 时无法从数据集中的连接表中获取数据

database - 获取超过 255 个字符的列时出现 Sybase 错误

c# - Winforms 组合框和数据绑定(bind)

c# - Xamarin Forms - 点击标签时打开多个页面

c# - 导航系统并保持屏幕的位置

c# - Silverlight 弹出窗口实际大小

c# - ItemsControl 中的 PRISM View 注入(inject)

wpf - 继承样式或以编程方式查找样式

silverlight - 在 Windows Phone 中调用电话

带帧计数器的 Silverlight 媒体播放器