有什麼辦法可以強制數據綁定在創建後立即在控件上初始化?強制數據綁定初始化
我的問題是我創建了一個自己的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