2015-10-31 89 views
4

它是否正確無法綁定到Universal XAML Apps中的任何Nullable<T>UWP - 將TextBox.Text綁定到Nullable <int>

我發現這個鏈接從2013年:

https://social.msdn.microsoft.com/Forums/en-US/befb9603-b8d6-468d-ad36-ef82a9e29749/textbox-text-binding-on-nullable-types?forum=winappswithcsharp

指出:

綁定到空的值在Windows 8 Store應用程序不支持。它只是沒有進入這個版本。對於v.Next,我們已經有了這個問題。

但是這真的可能還沒有被修復嗎?

我的綁定:

<TextBox Text="{Binding Serves, Mode=TwoWay}" Header="Serves"/> 

我的房產:

public int? Serves 
{ 
    get { return _serves; ; } 
    set 
    { 
     _serves = value; 
     OnPropertyChanged(); 
    } 
} 

而且我在輸出時出現錯誤:

Error: Cannot save value from target back to source. 
BindingExpression: 
    Path='Serves' 
    DataItem='MyAssembly.MyNamespace.RecipeViewModel, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'; target element is 'Windows.UI.Xaml.Controls.TextBox' (Name='null'); target property is 'Text' (type 'String'). 

回答

6

好像它不是固定的。由於XAML是使用內置的轉換器,在這種情況下,你也許可以用自己的調換,處理nullables:

XAML:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel.Resources> 
     <local:NullConverter x:Key="NullableIntConverter"/> 
    </StackPanel.Resources> 
    <TextBox Text="{Binding Serves, Mode=TwoWay, Converter={StaticResource NullableIntConverter}}" Header="Serves"/> 
</StackPanel> 

後面的代碼:

public class NullConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { return value; } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     int temp; 
     if (string.IsNullOrEmpty((string)value) || !int.TryParse((string)value, out temp)) return null; 
     else return temp; 
    } 
} 

public sealed partial class MainPage : Page, INotifyPropertyChanged 
{ 
    private int? _serves; 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void RaiseProperty(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 

    public int? Serves 
    { 
     get { return _serves; } 
     set { _serves = value; RaiseProperty("Serves"); } 
    } 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     DataContext = this; 
    } 
} 
+0

呀,這也是我的解決方法。我只是有點驚訝,這還沒有實現。 –

+0

@TroelsLarsen我想他們只是超負載更重要的錯誤,因爲這個可以很容易繞過。 [類似的錯誤](http://stackoverflow.com/q/24720929/2681948),可以很容易地用轉換器'修復'。 – Romasz

+1

@Rommasz:對。隨着WPF和UWP的相似之處,像這樣的遺漏更加突出。無論如何,感謝您的幫助! –

相關問題