添加到 ListView 时不调用网格构造函数

Grids constructor isn't called on add to ListView

我正在开发一个 Windows phone 应用程序,我有这样的逻辑:

我有一个聊天视图,其中包含视频或文本消息的 ListView。我的视频消息是实现我的 IPlayableMessage 接口的自定义控件:

public class VideoMessage : Grid , IPlayableMessage
{
    public VideoMessage()
    {
        this.Loaded += Loaded;
    }

    private void Loaded(object sender, RoutedEventArgs e)
    {
        MessagePlayer.Sub(this);
    }

    public void Play()
    {
        //Some logic for video play
    }

    public Player MessagePlayer
    {
        get { return (Player)GetValue(MessagePlayerProperty); }
        set { SetValue(MessagePlayerProperty, value); }
    }
    public static readonly DependencyProperty MessagePlayerProperty =
        DependencyProperty.Register("MessagePlayer", typeof(Player), typeof(VideoMessage), null);

}

这是我的界面:

public interface IPlayableMessage
{
    void Play(Uri uri = null);
}

在构造函数中,我使用此参数调用 Sub 方法,这使我将来可以播放我的视频消息。 这很好用,但是如果我向我的 ListView 添加一条新消息(并且我在视图中看到它),则不会调用控件构造函数,因此我的对象不会将其自身传递给播放器。

为什么向 ListView 添加新元素时不调用构造函数和 Loaded 事件?

调用 thought 的构造函数,当我上下滚动 ListView 并执行其分页....

它减少了未注册网格的数量,但每个对象调用了几次,而且它也没有覆盖 100% 的项目。

如有任何帮助,我们将不胜感激。 :)

您是否尝试向 MessagePlayer 属性 添加回调并在那里处理操作?

public static readonly DependencyProperty MessagePlayerProperty = DependencyProperty.Register(
        "MessagePlayer", typeof (Player), typeof (VideoMessage), new PropertyMetadata(default(Player), PropertyChangedCallback));

private static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
       var control = d as VideoMessage;
       (e.NewValue as Player).Sub(control);
}