添加到 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
并执行其分页....
一段时间后,我将我的注册移至:
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);
}
我正在开发一个 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
并执行其分页....
一段时间后,我将我的注册移至:
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);
}