我是使用Silverlight的xaml(用于MVVM APPROACH)的初学者 . 我读了几篇文章,对此一点感到困惑 . 如果有人能解释以下内容之间的区别,我将非常感激 .
假设我的XAML是:
xmlns:viewmodel="clr-namespace:smallMVVM"
......
......
<UserControl.Resources>
<viewmodel:ViewModel x:Key="ViewModel"/>
<viewmodel:DatetimeToDateConverter x:Key="MyConverter"/>
</UserControl.Resources>
现在有什么区别:
-
我的意思是在MainPage.cs中,如果我这样做
"this.DataContext = new ViewModel();"
. 并在MainPage.xaml中,如果我执行以下<Grid DataContext="{Binding Source={StaticResource ViewModel}}">
. 这两者有什么区别吗? -
在某个例子中,我看到
ItemsSource="{StaticResource customers}"
.ItemSource
与DataContext
的区别如何?虽然我在示例(1)
中可以看到我在DataContext的Binding中有相同的内容(请参阅:Source={StaticResource ViewModel}
并在(2)
中将其替换为customers
) . 两者有何不同? -
有时我也直接看到
ItemsSource="{Binding Students}"
里面没有StaticResource
. 它与StaticResource的不同之处是什么? -
一些例子只是
Binding="{Binding Name}"
. -
SelectedItem
和SelectedValue
如何不同?
Could someone please explain them with a small and simple example ? 在互联网搜索中,有一些典型的例子供初学者理解 .
1 回答
1)从技术上讲,数据上下文的两个声明之间没有区别我喜欢在代码隐藏中执行它,如下所示:
2)您不希望将ItemsSource设置为静态页面资源,您希望将其设置为ViewModel中的属性 . 下面是一个示例View和ViewModel,注意VM上的继承和Impelments,这些允许您的VM告诉您的View已更改属性,并重新加载该属性 .
视图:
视图模型:
上面的关键部分是
Me.OnPropertyChanged("SampleCollection")
,它告诉View更新它绑定的属性 .关于体系结构的说明,如果要构建具有多个View和ViewModel的应用程序,则创建ViewModelBase并使其继承DependencyObject并实现INotifyPropertyChanged,然后所有实际视图模型都可以从ViewModelBase继承 .
我还创建了一个名为TestModel的类,它在VM中使用,但保留为空 . 该模型是您将代码与数据库进行通信的地方,或者我所做的,调用与我的数据库通信的WCF服务 .
5)最后,SelectedItem是ItemSource中选择的实际对象,而SelectedValue是SelectedValuePath的值 . 在上面的示例中,我创建了一个简单的String集合,但是假设您有一组具有多个属性的自定义对象,您可以将SelectedValuePath指定为其中一个属性 . SelectedItem将返回整个对象 .