【发布时间】:2014-02-05 05:46:53
【问题描述】:
我的控件有一个基类,因此从这个基类派生的所有控件都会引发相同的事件
public class TradeEnterControl: UserControl
{
TradeData masterTrade;
public TradeData MasterTrade
{
get
{
return masterTrade;
}
set
{
masterTrade = value;
}
}
public delegate void TradeUpdateRoutedEventHandler(object sender, EventArgs e);
public static readonly RoutedEvent TradeUpdateEvent;
static TradeEnterControl()
{
TradeUpdateEvent = EventManager.RegisterRoutedEvent("TradeUpdate", RoutingStrategy.Bubble,
typeof(TradeUpdateRoutedEventHandler), typeof(TradeEnterControl));
}
#region Trade Update Event
public event TradeUpdateRoutedEventHandler TradeUpdate
{
add
{
base.AddHandler(TradeUpdateEvent, value);
}
remove
{
base.RemoveHandler(TradeUpdateEvent, value);
}
}
#endregion
public void RaiseTradeUpdateEvent()
{
RaiseEvent(new RoutedEventArgs(TradeUpdateEvent));
}
}
所以我的控件将继承TradeEnterControl
public partial class CollRepoTradeEnterControl : TradeEnterControl
我没有重新定义MasterTrade 属性。
在我的 XAML 中,我有 TradeEnterControl 作为占位符,就像这样
<my:TradeEnterControl Grid.Column="0" Grid.Row="1" Margin="3,3,3,3" HorizontalAlignment="Stretch" x:Name="TradeEnterControl" VerticalAlignment="Stretch" TradeUpdate="TradeEnterControl_TradeUpdate" />
在运行时,我将TradeEnterControl 分配为,
TradeEnterControl.Content = new CollRepoTradeEnterControl();
当我更新我的CollRepoTradeEnterControl 中的MasterTrade 属性时,
TradeEnterControl 中的 MasterTrade 属性仍为 null。我不知道为什么,是因为我将其分配为TradeEnterControl.Content = new CollRepoTradeEnterControl(); 的方式吗?如何确保在分配 CollRepoTradeEnterControl MasterTrade 属性时,TradeEnterControl 中的 MasterTrade 属性也被分配?
补充: 当我在这里设置断点时:
private void TradeEnterControl_TradeUpdate(object sender, EventArgs e)
{
SplitTradeControl.SplitEntryGroup.MasterTrade = ((TradeEnterControl)sender).MasterTrade;
}
我发现,sender 是 TradeEnterControl MasterTrade 属性是 null
但隐藏在树的深处,我可以看到 MasterTrade 属性已分配,
【问题讨论】:
-
MasterTrade属性不会像基类和子类一样单独分配。当它从孩子设置时,它将直接设置到基础。你从哪里得到MasterTrade的TradeEnterControl是空的? -
@Sankarann 来自
MainWindow.xaml后面的代码,其中包含TradeEnterControl
标签: c# wpf xaml user-controls