Xaml 在文本框中更改的值上应用值转换器

Xaml 在文本框中更改的值上应用值转换器,xaml,data-binding,windows-8,winrt-xaml,ivalueconverter,Xaml,Data Binding,Windows 8,Winrt Xaml,Ivalueconverter,我有一个简单的WinRT(Win8、.NET/C#/XAML)项目。我的一个XAML TextBox控件附带了一个自定义StringValueConverter,用于格式化视图模型中的数据绑定值 这很好,但它缺少一件事:当用户更改文本框中的值(例如:货币值)并离开文本框时,转换器应该自动应用。到目前为止,视图模型中的数据绑定值已更新,但视图不会再次应用转换器 此解决方案或任何已知自定义解决方案是否有内置解决方案?我测试了您描述的场景,效果良好: XAML: 值转换器: using System;

我有一个简单的WinRT(Win8、.NET/C#/XAML)项目。我的一个XAML TextBox控件附带了一个自定义StringValueConverter,用于格式化视图模型中的数据绑定值

这很好,但它缺少一件事:当用户更改文本框中的值(例如:货币值)并离开文本框时,转换器应该自动应用。到目前为止,视图模型中的数据绑定值已更新,但视图不会再次应用转换器


此解决方案或任何已知自定义解决方案是否有内置解决方案?

我测试了您描述的场景,效果良好:

XAML:

值转换器:

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace ValueConverterTest
{
   public class CustomConverter : IValueConverter
   {
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
         return value;
      }

      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
      {
         return value;
      }
   }
}
这个样品很好用。通过首先离开文本框,将调用convert back方法,然后再次调用convert方法


您确定绑定工作正常吗?

您的ViewModel(我假设是DataContext)是从BindableBase类继承的(还是以其他方式实现INotifyPropertyChanged类)?您必须通知UI值已更改。这不是很奇怪吗?当用户更改UI上的值时,为什么我必须再次从视图模型触发UI以更新(格式化)值?对我来说(逻辑上)没有多大意义。当然,视图模型(对应绑定的数据项)实现了INotifyPropertyChanged。否则,整个数据绑定将无法工作。您确定这是一个正常工作的WinRT XAML示例吗?对我来说更像WPF。。。否:这个简单的示例(用于WinRT)在Windows应用商店应用程序项目中不起作用。
namespace ValueConverterTest
{
   using System.ComponentModel;
   using System.Windows;

   public partial class MainWindow : Window, INotifyPropertyChanged 
   {

      public string CustomText
      {
        get { return customText; }
        set
        {
           customText = value;
           OnPropertyChanged("CustomText");
        }
      }

      public MainWindow()
      {
        InitializeComponent();
        DataContext = this;
      }

      private string customText;

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void OnPropertyChanged(string propertyName)
      {
         PropertyChangedEventHandler handler = PropertyChanged;
         if (handler != null)
         {
            handler(this, new PropertyChangedEventArgs(propertyName));
         }
      }
   }
}
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace ValueConverterTest
{
   public class CustomConverter : IValueConverter
   {
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
         return value;
      }

      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
      {
         return value;
      }
   }
}