2

依存関係プロパティの使用に問題があります。コンストラクターでオブジェクトを初期化するために 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);
...
        }
4

1 に答える 1

8

お気づきのように、データ コンテキストがまだ読み込まれていないため、そのロジックをコンストラクターに入れることはできません。次の 2 つのいずれかを行うことができます。

  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);
}
于 2012-12-15T00:54:02.527 に答える