嗯,WPF
這個小怪癖真的在我的皮膚下。所以,我有一個DataGrid
這樣的:綁定到WPF中的可空數據類型
<DataGrid x:Name="Rates" AlternatingRowBackground="#FCFCFC" AutoGenerateColumns="False" CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserAddRows="False" SelectionUnit="FullRow" CanUserSortColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Item" Width="Auto" IsReadOnly="True" Binding="{Binding item}"/>
<DataGridTextColumn Header="Rate" Width ="*" Binding="{Binding rate, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
它只是在A列的項目清單,我們必須進入B列聽起來很簡單的費率。
以下是它綁定到的ViewModel
中的屬性。
private BindableCollection<Rate> _rates;
public BindableCollection<Rate> Rates
{
get
{
return _rates;
}
set
{
if (value == _rates)
{
return;
}
_rates = value;
NotifyOfPropertyChange();
}
}
這裏是Rate
定義:
public partial class Rate
{
public int ID { get; set; }
public string client { get; set; }
public string item { get; set; }
public Nullable<decimal> rate { get; set; }
}
所以,我DataGrid
的第二列是越來越勢必Rate.rate
這是一個Nullable<decimal>
。這就是問題所在。 Nullable<decimal>
確實接受NULL
,但TextBox
不會讓我輸入空白值。此外,如果我鍵入某個值,然後將其刪除,那麼ViewModel
將保留先前的值。
我已經看到涉及IValueConverter
的解決方案,但我更喜歡基於XAML的解決方案。有沒有?我有幾個模塊,其中DataType
爲Nullable
,如果每次都必須使用IValueConverter
,它會很快變得非常單調乏味。
編輯
我使用Caliburn.Micro
,因此使用TargetNullValue=''
不會工作無處不在,作爲綁定是自動的。它將在上面的示例中工作,其中明確提到了binding
。
一個黑客可以用字符串替換Nullable decimal,然後驗證用戶輸入,甚至限制用戶輸入只允許通過擴展文本框類文本更改事件或previewKeydown事件來允許十進制值。 –