代码之家  ›  专栏  ›  技术社区  ›  queen3

Silverlight:绑定到静态值

  •  4
  • queen3  · 技术社区  · 16 年前

    我需要文本块。从翻译管理器中检索文本,比如

    <TextBlock Text="{Binding TranslateManager.Translate('word')}" />
    

    我不想为所有文本块设置数据源。我找到的唯一方法是绑定到“static”类并使用converter:

    <TextBlock Text="{Binding Value, 
                      Source={StaticResource Translation}, 
                      Converter={StaticResource Translation}, 
                      ConverterParameter=NewProject}" />
    

    这些助手类

     public class TranslationManager : IValueConverter
     {
      public static string Translate(string word)
      {
         return translate(word);
      }
    
      // this is dummy for fake static binding
      public string Value { get; set; }
    
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
         var name = parameter as string;
         return TranslationManager.Translate(name, name);
      }
     }
    

    2 回复  |  直到 16 年前
        1
  •  3
  •   Jeremiah    16 年前

    让我先声明一下:您应该使用静态资源来翻译单词: Application Resources *.RESX Files

    但是,如果您需要简化xaml,唯一缺少的就是在整个视图上放置datacontext。听起来您没有使用MVVM,因此将此逻辑放在构造函数中或代码后面,可以通过绑定访问更多功能:

    public MainPage()
    {
        // Required to initialize variables
        InitializeComponent();
    
    
         // This is the key to simplify your xaml, 
         // you won't have set the source for individual controls
         // unless you want to
        DataContext = this;     
    }
    

    <TextBlock Text="{Binding 
                          ConverterParameter=Hi, 
                          Converter={StaticResource Translator}}"/>
    

    public class Translator : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
        { 
                return "Hola!";
        } 
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
                return "Hi!";
        }
    }
    
        2
  •  0
  •   Community Mohan Dere    8 年前

    是的,Silverlight目前缺少的一个重要功能是对其他标记扩展的支持-x:Static是一个更痛苦的扩展。

    毫无疑问,你现在所做的是单向的。人们尝试了多种解决方法:

    http://skysigal.xact-solutions.com/Blog/tabid/427/EntryId/799/Silverlight-DataBinding-to-a-static-resource.aspx

    Using static objects in XAML that were created in code in Silverlight