我有一个DynamicObject类绑定到silverlight xaml中的某些控件。
class Localizer
{
public Strings Strings { get; set; }
}
public class Strings : DynamicObject
{
Dictionary<string, string> values;
public Strings(Dictionary<string, string> values)
{
this.values = values;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string value;
bool success = values.TryGetValue(binder.Name, out value);
result = value;
return success;
}
}
并将一些控件绑定到此:
<TextBlock Text="{Binding Strings.User, Source={StaticResource Localizer}}"/>
当我运行应用程序时,我在VS输出中收到此错误:
System.Windows.Data错误:BindingExpression路径错误:'.... Localization.StringsResource''找不到'Login'属性.... Localization.StringsResource'(HashCode = 10857028)。 BindingExpression:Path ='Strings.Login'DataItem ='.... Localization.Localizer'(HashCode = 30604389); target元素是'System.Windows.Controls.Button'(Name ='btnLogin'); target属性是'Content'(类型'System.Object')。
但是当在这样的代码中读取属性时:
string UserName = localizer.Strings.Login;
它工作正常,是否可以将控件绑定到xaml中的DynamicObject?
答案 0 :(得分:0)
不幸的是,这是Silverlight中的一个错误,:(左 Databinding to Dynamic Objects is Broken
答案 1 :(得分:0)
在Silverlight 4中,您无法绑定数据属性,但可以绑定索引器数据。由于我假设你不支持你的Strings对象的实时数据更改,因为它不支持INotifiyPropertyChanged
,你可以只返回字典并使用索引器绑定语法。
但是如果您确实需要支持INotifiyPropertyChanged,则silverlight具有通知您可以在Strings对象中使用的特定索引器值new PropertyChangedEventArgs("Item["+key+"]")
的更改的语法。
Silverlight 5可能有一个简单的workaround,或者很难,但现在很难说。