gpt4 book ai didi

c# - 我究竟做错了什么?在构造函数中使用依赖属性的值

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:01 25 4
gpt4 key购买 nike

我在使用依赖属性时遇到了一些问题。我想在构造函数中使用 DP 的值来初始化一个对象。

问题在于 Month 始终为 0(在构建期间),这会导致 ExpenseDetailPageDataModel 的初始化错误。在构造函数完成他的工作后,变量 Month 的值立即更改为正确的值(在本例中为 11)。

FinanceItemViewControl 是自定义用户控件。

<common:FinanceItemViewControl Grid.Column="2" Month="11"/>

Month 是一个依赖属性,如下面的代码所示:

public sealed partial class FinanceItemViewControl : UserControl
{
...

public static readonly DependencyProperty MonthProperty = DependencyProperty.Register
(
"Month",
typeof(int),
typeof(FinanceItemViewControl),
new PropertyMetadata(
0, new PropertyChangedCallback(MonthProperty_Changed))
);

public int Month
{
get { return (int)GetValue(MonthProperty); }
set { SetValue(MonthProperty, value); }
}
#endregion

private static void MonthProperty_Changed(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
//TODO: trigger data reload
}

public FinanceItemViewControl()
{
this.InitializeComponent();
...

Debug.WriteLine("Constructor: " + Month);

detailPageDataModel = new ExpenseDetailPageDataModel(Month);
...
}

最佳答案

您不能将该逻辑放在构造函数中,因为正如您所注意到的,数据上下文尚未加载。您可以执行以下两项操作之一:

  1. 将逻辑放在 MonthProperty_Changed 事件中。
  2. 使用控件的 Loaded 事件:

public FinanceItemViewControl()
{
this.InitializeComponent();
detailPageDataModel = new ExpenseDetailPageDataModel(Month);
this.Loaded += UserControl_Loaded;
}

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Constructor: " + Month);
}

关于c# - 我究竟做错了什么?在构造函数中使用依赖属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com