网格构造函数不是';t在添加到ListView时调用
本文关键字:添加 ListView 调用 构造函数 网格 | 更新日期: 2023-09-27 18:25:48
我正在开发一个Windows手机应用程序,我有这样的逻辑:
我有一个聊天视图,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
添加一条新消息(我在视图中看到它),控件构造函数就不会被调用,这样我的对象就不会将其自身传递给Player。
为什么在向ListView
添加新元素时不调用构造函数和Loaded事件?
当我上下滚动ListView
并执行分页时,调用think的构造函数。。。。
过了一段时间,我将注册转移到:
protected override Size ArrangeOverride(Size finalSize)
它减少了未注册网格的数量,但每个对象都会调用多次,而且它也不能覆盖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);
}