有什么办法可以强制数据绑定在创建后立即在控件上初始化?强制数据绑定初始化
我的问题是我创建了一个自己的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;您会注意到,这会在您选择父菜单项时执行。 我希望程序在显示主窗口后尽快完成子菜单项的绑定,并给程序一些时间来处理绑定属性给出的值。
谢谢你的建议,但这并不能解决我的问题。我已经添加了一些代码来解决我的问题。你有更多的想法吗? – 2010-08-23 06:20:28