我有EntitiesUserControl
負責EntitiesCount
依賴屬性:只允許OneWayToSource裝訂模式
public static readonly DependencyProperty EntitiesCountProperty = DependencyProperty.Register(
nameof(EntitiesCount),
typeof(int),
typeof(EntitiesUserControl),
new FrameworkPropertyMetadata(1, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public int EntitiesCount
{
get { return (int)this.GetValue(EntitiesCountProperty); }
set { this.SetValue(EntitiesCountProperty, value); }
}
另一(主)控制包括EntitiesUserControl
並朗讀屬性通過結合:在視圖模型
<controls:EntitiesUserControl EntitiesCount="{Binding CountOfEntities, Mode=OneWayToSource}" />
CountOfEntities
屬性只是存儲和處理計數值的變化:
private int countOfEntities;
public int CountOfEntities
{
protected get { return this.countOfEntities; }
set
{
this.countOfEntities = value;
// Custom logic with new value...
}
}
我需要EntitiesCount
EntitiesUserControl
的屬性爲只讀(主控制不能更改它,只是讀取),並且它的工作原理僅僅是因爲Mode=OneWayToSource
明確聲明。但是如果聲明TwoWay
模式或者沒有顯式聲明模式,那麼EntitiesCount
可以從外部重寫(至少在綁定初始化之後,因爲發生在默認的依賴項屬性值賦值之後)。
由於綁定限制(在此answer中最好描述),我不能執行「合法」只讀依賴項屬性,所以我需要阻止除OneWayToSource
以外的其他模式的綁定。這將是最好有一些OnlyOneWayToSource標誌像FrameworkPropertyMetadataOptions
枚舉BindsTwoWayByDefault
值...
任何建議如何實現這一目標?
我不知道我使用'Mode = OneWayToSource'出現了什麼問題。唯一的問題是你必須輸入那個或什麼?對不起,我不太在意這個問題。我會分享一個黑客的方式來實現只有'OneWayToSource'綁定,但不知道這就是你需要的。 –
@SzabolcsDézsi問題不是我*必須*類型,問題只是另一種方式 - 我*可能不會*鍵入,並且沒有任何東西會告訴我,我將以它不應該使用的方式使用屬性用過的。作爲一個類比 - 如果您編寫將值分配給只讀屬性的代碼,則無法編譯程序。 – Sam