我正在嘗試編寫一個自定義的WPF ValidationRule來強制某個屬性在給定集合的上下文中是唯一的。例如:我正在編輯綁定到ListView的自定義對象的集合,我需要確保集合中每個對象的Name屬性都是唯一的。有誰知道如何做到這一點?ValidationRule爲了實現唯一名稱
1
A
回答
2
首先,我想創建一個簡單的DependencyObject類來保存您的收藏:
class YourCollectionType : DependencyObject {
[PROPERTY DEPENDENCY OF ObservableCollection<YourType> NAMED: BoundList]
}
然後,在您的有效性規則派生類,創建一個屬性:
YourCollectionType ListToCheck { get; set; }
然後,在XAML,請執行以下操作:
<Binding.ValidationRules>
<YourValidationRule>
<YourValidationRule.ListToCheck>
<YourCollectionType BoundList="{Binding Path=TheCollectionYouWantToCheck}" />
</YourValidationRule.ListToCheck>
</YourValidationRule>
</Binding.ValidationRules>
然後在您的驗證中,查看ListToCheck的BoundList屬性的coll您正在驗證的項目。如果它在那裏,顯然返回一個錯誤的驗證結果。如果不是,則返回true。
0
我只會創建一個自定義依賴項對象,如果有其他屬性我想綁定到規則。因爲在這種情況下,我們所做的只是附加一組值來檢查,我讓我的<UniqueValueValidationRule.OtherValues>
屬性爲<CollectionContainer>
。
從那裏,讓過去有<CollectionViewSource>
持有實際的結合,並給它一個{StaticResource}
關鍵,這OtherValues
可再使用的綁定源所需的DataContext
沒有被繼承,<TextBox.Resources>
的問題。
然後驗證規則本身只需循環通過OtherValues.Collection
並執行相等性檢查。
觀察:
<TextBox>
<TextBox.Resources>
<CollectionViewSource x:Key="otherNames" Source="{Binding OtherNames}"/>
</TextBox.Resources>
<TextBox.Text>
<Binding Path="Name">
<Binding.ValidationRules>
<t:UniqueValueValidationRule>
<t:UniqueValueValidationRule.OtherValues>
<CollectionContainer Collection="{Binding Source={StaticResource otherNames}}"/>
</t:UniqueValueValidationRule.OtherValues>
</t:UniqueValueValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
相關問題
- 1. 爲luaL_newmetatable選擇唯一名稱
- 2. LINQ:唯一名稱列表
- 3. 唯一事件名稱
- 4. 翻轉(。)的唯一名稱
- 5. 生成唯一名稱?
- 6. 爲現有的MySQL模式實現了模糊的唯一標識符
- 7. 出版了唯一的名稱Play商店中搜索
- 8. Twilio試圖爲會議名稱設置一個唯一的名稱
- 9. Haskell函數是否已知/實現爲另一個名稱?
- 10. 實體框架錯誤 - 「EntityContainer名稱必須是唯一的」
- 11. 爲具有多列的唯一行分配唯一的ID名稱
- 12. 唯一名稱伴隨日期
- 13. MySQL選擇名稱的唯一配對
- 14. SQL重構 - UniqueIdentifiers的唯一名稱
- 15. XML ::簡單,唯一的名稱
- 16. 唯一主管/服務器名稱
- 17. 帳戶名稱必須是唯一的
- 18. 計算唯一名稱的數量
- 19. ItemListener getitem()不返回唯一名稱
- 20. Cookie名稱長度,唯一性
- 21. 獲取唯一元素名稱的XPath
- 22. 使文本框具有唯一名稱
- 23. ITEM名稱必須是唯一的
- 24. Laravel Soft刪除唯一列名稱
- 25. CMAKE:忽略唯一的變量名稱
- 26. 找到設備的唯一名稱?
- 27. 具有唯一值的堆棧名稱
- 28. EntityContainer名稱必須是唯一的
- 29. 插件名稱檢查是否唯一
- 30. 的「名稱」沒有定義,發現了
這似乎並不工作,綁定結果總是空(似乎並沒有繼承的DataContext) – 2010-05-04 05:46:29