我对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中,作为代码隐藏文件中的进一步“连接器”属性。
发布于 2012-01-23 15:29:13
您的ViewModel应该设置为视图的DataContext。然后,您不需要任何“进一步的连接器”在代码背后。绑定实际上是指DataContext,如果不设置它,它仍然是'this',它对应于您的代码隐藏文件(这只是对您的视图的一部分)。
另外,看一看:WPF应用程序与模型-视图-视图模型设计模式
您应该首先获得WPF和它的绑定基础,但是一旦您理解了这些基础,我建议您查看卡利本微及其基于约定的绑定、事件处理和其他特性,这些特性使您的代码更加简洁。
发布于 2012-01-23 15:36:54
您的{Binding ElementName=MW意味着您要绑定到窗口本身,所以您的DataContext就是窗口,您实现的任何属性都需要在该窗口中定义(在您后面的代码中--您的“连接器”)。
您需要移除ElementName=MW位,并将您的ViewModel指定为DataContext,以便可以直接绑定到其属性。如何做到这一点取决于您是使用"ViewModel优先“还是”视图优先“
在“视图优先”中,在创建视图时,在代码中手动将DataContext分配给视图。
首先,在ViewModel中,您可以在XAML中创建一个DataTemplate,该DataTemplate将您的视图绑定到特定的ViewModel。我认为ViewModel首先是比较常见的。Darjan发布的链接应该可以帮助您理解不同之处。
发布于 2012-01-23 15:42:19
您应该使用单独的ViewModel类(WindowViewModel)来表示窗口(Window.DataContext)的数据上下文。
我发现使用MVVM轻型工具包和跟踪网站上的一些视频帮助我填补了空白。在开始之前花点时间去学习它,它就会开始沉入其中。IoC容器还与MVVM + WPF混合,用于目录管理和视图模型的生存期管理以及改进的设计时体验(可混搭性)。
工具包并不是必需的,有时会妨碍您学习模式。但是,一旦您理解了它,就应该利用一个工具包来加快开发过程。这是一个各种MVVM工具包的比较。
https://stackoverflow.com/questions/8974015
复制相似问题