【发布时间】:2012-02-16 22:38:04
【问题描述】:
我是 WPF 和整个数据绑定的新手。我读了几篇文章,对如何将我的数据绑定到 UI 元素感到很困惑。
我看到一个帖子是这样做的:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="myWindow">
<Grid>
<TextBox Text="{Binding Path=Speed, ElementName=myWindow}" />
</Grid>
</Window>
这假定Speed 是在代码隐藏文件中定义的属性/成员。其他一些人使用 静态资源 命名绑定,并引用这个和其他名为 DataContext 的人用于绑定。现在,因为我是 WPF 数据绑定的新手,所以我很不确定是否存在任何关于使用哪种数据绑定的最佳实践方法。
基本上我想知道为什么必须有几个类属性定义为底层视图模型的连接器,我虽然这些东西更“动态”。
我的目标是只拥有 XAML 文件,而无需在 *.xaml.cs 代码隐藏文件中添加任何内容。例如:我有一个名为MainWindowViewModel 的类(它将代表我的ViewModel),它有一个ObservableCollection<string> 类型的成员,我想将ListBox(在我的视图中)绑定到这个集合。到目前为止,我完成这项工作的唯一方法是使用第一种情况,ElementName,我必须在视图类中添加一个属性作为一种连接器。就像这样:
MainWindow.xaml:
<Window x:Class="Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="MW" Title="MainWindow" Height="419" Width="463">
<Grid>
<ListBox ItemsSource="{Binding ElementName=MW, Path=ListerResultConnector}" />
</Grid>
</Window>
MainWindow.xaml.cs:
private ObservableCollection<string> mListerResultData = MainWindowViewModel.Instance.RetrievalStringResults;
public ObservableCollection<string> ListerResultConnector
{
get { return mListerResultData; }
}
我的问题是,是否存在一种更智能的方式将数据绑定到我的 UI,作为代码隐藏文件中的进一步“连接器”属性。
【问题讨论】: