【发布时间】:2010-08-19 13:06:22
【问题描述】:
有什么方法可以强制数据绑定在控件创建后立即初始化?
我的问题是我创建了一个自己的 UserControl 派生控件,它必须在显示之前进行一些耗时的处理。更准确地说,使用 .Net 的 MediaPlayer 组件创建视频媒体的缩略图。我在自定义的 MenuItem 控件中显示我的控件。
在现在工作时,控制在显示(选择父MenuItem时)初始化,该控件启动耗时的工作并强制执行某种“处理项目”信息,直到控制完成工作。
我需要找到一种方法,使文件名的数据绑定在显示主窗口时立即执行,而不是在显示我的控件之前执行。有可能吗?
我创建了一个小应用程序来演示我的问题:
Window1.xaml
<Window x:Class="TestBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style x:Key="MyMenuStyle" TargetType="MenuItem">
<Setter Property="Header" Value="{Binding MenuHeader}"/>
</Style>
</Window.Resources>
<Grid>
<Menu>
<MenuItem Header="Data">
<MenuItem Header="Submenus" ItemsSource="{Binding SubMenus}" ItemContainerStyle="{StaticResource MyMenuStyle}" />
</MenuItem>
</Menu>
</Grid>
</Window>
Window1.xaml.cs
using System.Collections.ObjectModel;
using System.Windows;
namespace TestBinding
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = new BindingViewModel();
}
}
class BindingViewModel
{
public ObservableCollection<MyMenuItems> SubMenus { get; set; }
public BindingViewModel()
{
SubMenus = new ObservableCollection<MyMenuItems>();
SubMenus.Add(new MyMenuItems("Menu 1"));
SubMenus.Add(new MyMenuItems("Menu 2"));
SubMenus.Add(new MyMenuItems("Menu 3"));
}
}
public class MyMenuItems
{
private string _menuHeader;
public string MenuHeader
{
get
{
return _menuHeader;
}
set
{
_menuHeader = value;
}
}
public MyMenuItems(string header)
{
_menuHeader = header;
}
}
}
如果你运行这个程序并在该行设置一个断点 return _menuHeader; 你会注意到它在你选择父菜单项时执行。 我希望程序在显示主窗口后尽快完成子菜单项的绑定,给程序一些时间来处理绑定属性给出的值。
【问题讨论】:
标签: wpf data-binding media-player