我有一個自定義控制元件myCustomControl.Xaml
<UserControl.Resources>
...
</UserControl.Resources>
<ComboBox Name="myCustomComboBoxParent"
someId = "{Binding customId}"
.../>
還有一個cs檔案myCustomControl.xaml.cs
public static readonly DependencyProperty customIdProperty = DependencyProperty.Register(
nameof(customIdProperty), typeof(string), typeof(myClass),
new FrameworkPropertyMetadata(
"", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string customId
{
get { return (string)GetValue(customIdProperty); }
set { SetValue(customIdProperty, value); }
}
然后我有mainPage.xaml
我設定的地方customId
<local:customComboBox x:Name="myCustomComboBoxChild1" customId = "someIdToBeSended" .../>
我不明白為什么我customId
沒有從mainPage.xaml
to發送myCustromControl.xaml
?我做錯了什么?(ComboBox
沒有身份證)
uj5u.com熱心網友回復:
系結不起作用
依賴屬性是在控制元件本身上定義的。沒有顯式源的常規系結使用當前的DataContext
. 為了使您的系結作業,您必須將 設定DataContext
為控制元件本身。盡管您可以在建構式中使用 來執行此操作DataContext=this;
,但您不應該這樣做,否則自定義控制元件將不會從父級繼承其資料背景關系。
您應該做的是將控制元件指定為系結中的源。您可以通過將 an 分配x:Name
給您的控制元件然后使用ElementName
來參考它來做到這一點。
<UserControl ...
x:Name="This">
<Grid>
<ComboBox SomeProperty="{Binding customId, ElementName=This}"
.../>
</Grid>
</UserControl>
或者,您可以使用RelativeSource
自定義控制元件型別指定 a。
<ComboBox SomeProperty="{Binding customId, RelativeSource={RelativeSource AncestorType=local:myCustomControl}}"
.../>
依賴屬性定義
您的依賴屬性定義是錯誤的。
- 依賴屬性必須適合該模式
<Name>Property
,并且其包裝器屬性必須命名為<Name>
。包裝器屬性的名稱,而不是依賴屬性的名稱作為第一個引數傳遞。雖然這對您的具體場景沒有影響,但它會在以后引起問題。 - 所有者型別必須是定義了依賴屬性的控制元件的型別。在這里
typeof(myClass)
,但必須如此typeof(myCustomControl)
。
總之,dependecy 屬性應該這樣宣告:
public static readonly DependencyProperty customIdProperty = DependencyProperty.Register(
nameof(customId), typeof(string), typeof(myCustomControl),
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
另一個關于命名的評論。在 C# 中,您應該為類(因此也包括控制元件)和屬性遵守 Pascal-Casing。帕斯卡大小寫識別符號以大寫字母開頭,例如MyCustomControl
,CustomIdProperty
和CustomId
。
uj5u.com熱心網友回復:
替換nameof(customIdProperty)
為nameof(customId)
,typeof(myClass)
和typeof(myCustomControl)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/504937.html