簡體   English   中英

綁定到自定義控件屬性

[英]Binding to Custom Control Property

我正在開發一個帳戶列表下拉控件,該控件將在我的應用程序中使用。 下拉菜單將調用服務並檢索可用帳戶列表,並將在下拉菜單中顯示所選項目的屬性“ SelectedAccount”。 SelectedAccount將成為DependencyProperty,因為它必須由AccountDropdown控件的使用者綁定,並且必須是雙向綁定的,因此它反映了現有的SelectedAccount。

AccountDropdown.asmx很簡單,它包含一個ComboBox:

<ComboBox SelectedItem="{Binding Path=SelectedAccount, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"...

組合框的所選項目綁定到一個屬性,該屬性注冊為

DependencyProperty.Register("SelectedAccount", typeof(IAccount), typeof(AccountDropdown),
                                new UIPropertyMetadata(null));

...以及通常的屬性:

    #region SelectedAccount

    /// <summary>
    /// Selected account
    /// </summary>
    public IAccount SelectedAccount
    {
        get { return (IAccount)GetValue(SelectedAccountProperty); }
        set { SetValue(SelectedAccountProperty, value); }
    }
    #endregion SelectedAccount

屬性在代碼隱藏文件中定義...,數據上下文設置為“ this” ...,因此綁定設置正確。

使用此控件時,需要將SelectedAccount綁定到另一個視圖的ViewModel屬性,例如:

<Controls:AccountDropdown SelectedAccount="{Binding Path=SelectedAccount, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

當我運行上面的代碼並更改下拉列表中的選擇時,我收到了System.StackOverflow異常。 我什至無法調試它,該異常是從Windows.Base.dll引發的。

我已經為此苦苦掙扎了一天……任何幫助將不勝感激。

**注意:**我已經編寫了幾個具有依賴項屬性的WPF控件,它們可以正常工作,但是當我使用它們時,我在.asmx文件中顯式提供了該值。 在這種情況下,當我使用該屬性時,我將再次綁定。 我猜想暴露一個可綁定屬性可能需要一些其他技巧。

好的,通常情況下,解決方案很簡單。 AccountDropdown控件的DataContext被隱式設置為其自身,因此發生了無限循環。 只需指定DataContext即可在使用控件的DataContext處使用它(並因此使用預期的ViewModel綁定):

<Controls:AccountDropdown DataContext="{Binding}" SelectedAccount="{Binding Path=SelectedAccount, Mode=TwoWay}" />

我仍然必須弄清楚如何告訴控件使用包含它的控件的數據上下文...如果我確定了它,我將其張貼在這里...或者如果您知道任何人,請放棄一點光。

再次感謝那些回應。

我猜想SelectedAccountChanged方法會更新該字段,從而導致無限遞歸,從而導致堆棧溢出。

要測試:從DependencyProperty.Register調用中刪除SelectedAccountChanged,以確保這是錯誤的根源,然后檢查方法本身。

如果您需要幫助,請在此處發布方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM