【问题标题】:Silverlight: How to do this data binding?Silverlight:如何进行数据绑定?
【发布时间】:2010-12-09 20:24:26
【问题描述】:
我有一个控件,它显示有关Foo 对象的信息。我正在做数据绑定就好了。但是,我在这个控件中有一个AutocompleteTextBox,需要一个ItemsSource。数据存在于我的应用程序中,但没有理由在 Foo 的每个实例上都可用。这里处理它的首选模式是什么?
我在另一个类上有一个静态方法,它将返回我想要的列表 - Bar.GetNames()。有什么方法可以从 XAML 调用它吗?还是我需要使用StaticResource?
我正在使用 Silverlight 4。
【问题讨论】:
标签:
c#
silverlight
data-binding
xaml
【解决方案1】:
最简单的方法是在代码隐藏中进行,可能在 AutoCompleteTextBox.Loaded 事件处理程序中。比如:
void AutoCompleteTextBox_Loaded(object sender, EventArgs e)
{
((AutoCompleteTextBox)sender).ItemsSource = Bar.GetNames();
}
【解决方案2】:
这可能有几种不同的方式......
您可以创建一个自定义AutoCompleteTextBox,在控件中嵌入列表(从应用程序内部的某个静态存储库中提取,等等...)。
您可以将 Foo 上的属性用于应用程序内的服务或其他中间人以从单个位置检索数据。
您可以通过...引用 XAML 中的静态资源
Text={x:Static namespace:type}
...其中命名空间是在 XAML 中定义的类型的驻留命名空间。
【解决方案3】:
很遗憾,您不能在 Silverlight XAML 中引用静态属性。
我会建议类似 FooViewModel:
class FooViewModel: AnyBasicViewModelAround {
public Foo Model {get; set; }
public ItemNames : IList<ItemEntry> { get { return Bar.GetNames(); }}
}