2010-01-14 27 views
6

Tôi gặp khó khăn khi đặt một TextBox trống thành null trên trường DB không có giá trị.Xóa hộp văn bản không đặt giá trị ràng buộc thành null

XAML

<y:TextBox Text="{Binding Year1Cost, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged, 
    NotifyOnValidationError=True, 
    ValidatesOnDataErrors=True, 
    ValidatesOnExceptions=True, 
    StringFormat=\{0:c\}}" Grid.Row="3" Grid.Column="1" /> 

Khi tôi nhập bất kỳ giá trị vào nó các ràng buộc là tốt và giá trị nhập vào được truyền
Khi tôi rời khỏi một giá trị null một mình một null được truyền
Nếu tôi xóa các giá trị từ Hộp văn bản giá trị được chuyển là Giá trị gốc của Hộp văn bản và Giao diện người dùng không được thông báo về thay đổi Grrrrrrrrrrrrrrrr

Tôi đã dành nhiều thời gian kiểm tra các tùy chọn không có gì ngắn khi đặt mã phía sau OnTextChanged của tất cả các trường nullable tôi không thể thấy hiệu quả trong việc này.

Cảm ơn trước:

ps. Đã xem xét TargetNullValue để không thành công

Visual Studio 2008 - SP1 - Net 3.5

Trả lời

3

Xem xét sử dụng một value converter. Bạn sẽ có thể triển khai phương thức ConvertBack để dịch các chuỗi rỗng thành các giá trị rỗng.

+0

Đã phải chuyển đổi sang một không gian, như một chuỗi rỗng không kích hoạt bất động sản thay đổi sự kiện cho một số lý do. Cảm ơn sự giúp đỡ của bạn, tôi sẽ thực hiện trên tất cả các địa điểm cần thiết. – Traci

14

Set thuộc tính TargetNullValue của các ràng buộc để String.Empty:

<TextBox Text="{Binding TargetNullValue={x:Static sys:String.Empty}}"/> 

Tôi đã thử nó và nó làm việc cho tôi.

Và nếu tôi không sai (xin vui lòng tha thứ cho tôi nếu tôi), bạn nên thiết lập các StringFormat bất động sản như thế này:

StringFormat={}{0:C} 

này thậm chí còn có lẽ là lý do ngoại trừ bạn có.

+0

xmlns: sys = "clr-namespace: Hệ thống; assembly = mscorlib" Tôi đã thử điều này nhưng tiếp tục nhận được Lỗi 24 Không thể tải loại 'Microsoft.Windows.Design.Metadata.ProvideMetadataAttribute' từ assembly 'Microsoft.Windows.Design.Extensibility, Phiên bản = 3.5.0.0, Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a '. Dòng '1' Vị trí '6680'. – Traci

+0

Tôi donno. Nhưng nếu tôi là bạn, tôi sẽ thử cho một thử nghiệm để có một TextBox không có các định nghĩa khác; chỉ cần ràng buộc và TargetNullValue. Cách này có thể giúp bạn tìm ra nguồn gốc của ngoại lệ. – Shimmy

+0

Đã cố gắng xóa StringFormat tất cả cùng nhau và tôi vẫn nhận được cùng một meassage. --- ---- Đó là tất cả tôi có và vẫn nhận được ngoại lệ trên – Traci

3

Đối với tôi chỉ chuyển đổi hoạt động: Dưới đây là a link

public class NullableConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value == null ? string.Empty : String.Format(culture, "{0}", value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.IsNullOrEmpty(String.Format(culture, "{0}", value)) ? null : value; 
    } 
} 
Các vấn đề liên quan