2015-10-31 52 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的相似之处,像这样的遗漏更加突出。无论如何,感谢您的帮助! –

相关问题