簡體   English   中英

WPF DataGrid - 帶有 PropertyChanged 的​​ DataGridTextColumn 十進制/雙精度/浮點數輸入

[英]WPF DataGrid - DataGridTextColumn decimal/double/float input with PropertyChanged

我在 DataGridTextColumn 中使用 UpdateSourceTrigger=PropertyChanged 處理十進制(雙精度/浮點數)輸入時遇到問題。

(1) 我搜索了幾個站點,許多站點建議將其更改為 LostFocus。 我不太熱衷於這個實現,因為 PropertyChanged 的​​行為正是我所需要的。 除非有辦法用 LostFocus 獲得相同的結果??

我已閱讀有關 stackoverflow 的以下文章 - Link 1 , Link 2 , Link 3 , Link 4 , Link 5 & Link 6

(2) 使用Binding="{Binding StringFormat=N2}"或其變體具有非常煩人的行為,如鏈接 4中的注釋中所述。

(3) 另一種方法是允許字符串輸入,在后端解析為double。 這很好,我只是把它作為最后的解決方案。

(4) 最后在同一個鏈接 4中,xmedeko 提到了一個解決方案 - System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false; 僅適用於 .NET 4.5 或更高版本。

我確實有較新的版本,但不確定如何/在何處實現這行代碼。 或者是否有辦法在 XAML 本身中將此屬性設為 false? 任何幫助是極大的贊賞。 由於我的聲譽級別,無法回復對該鏈接的評論。

如果在保持與 PropertyChanged 類似的行為的同時還有其他更簡潔的方法,將會非常有幫助。

代碼
XAML - <DataGridTextColumn Header="Rate" Binding="{Binding Path=Rate, UpdateSourceTrigger=PropertyChanged}" Width="90"/>

CS -

public void NotifyPropertyChanged(string property)
{
   PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}

public double Rate
{
   get { return rate; }
   set { rate = value; NotifyPropertyChanged("Rate"); }
}

代碼其實很簡單。 這顯示在數據網格上。 DataGridTextColumn 不接受十進制值,Chevul Ervin 在鏈接 2 中正確指出了這一點 -

UpdateSourceTrigger=PropertyChanged 在每次擊鍵時重新評估文本。 以小數點結尾的數字無效。 將 UpdateSourceTrigger 更改為 LostFocus(與刪除它相同)或嘗試鍵入“.” 而后面還有其他數字。

一個老問題,但我想分享一個奇怪的解決方案:) 通過“ UpdateSourceTrigger=LostFocus ”更改“ UpdateSourceTrigger=PropertyChanged ”將允許十進制值。

我做了很多研究,但沒有找到解決方案。 所以使用選項 3 - 允許字符串輸入並在后端處理它。

暫無
暫無

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

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