使用MVVM将Silverlight绑定到DataForm中的Combobox
我有这个问题,我已经使用MVVM编写了Silverlight应用程序。 我需要创建绑定到ViewModel上的属性的DataForm,并且我想添加ComboBox并用来自其他集合的值填充到同一个ViewModel中。
码:
<dataFormToolkit:DataForm CurrentItem="{Binding NewUser, Mode=TwoWay}" AutoGenerateFields="False" Height="298">
<dataFormToolkit:DataForm.EditTemplate>
<DataTemplate>
<StackPanel>
<dataFormToolkit:DataField Label="Email">
<TextBox Text="{Binding Email, Mode=TwoWay}"/>
</dataFormToolkit:DataField>
<dataFormToolkit:DataField Label="Język">
<ComboBox ItemsSource="{Binding Path=Languages, Mode=TwoWay}"/>
</dataFormToolkit:DataField>
</StackPanel>
</DataTemplate>
</dataFormToolkit:DataForm.EditTemplate>
</dataFormToolkit:DataForm>
所有这些都由具有以下属性的NewAccountVM处理:
private User newUser;
public User NewUser {
get
{
return newUser;
}
set
{
if (value != newUser)
{
newUser = value;
RaisePropertyChanged("NewUser");
}
}
}
private ObservableCollection<Language> languages;
public ObservableCollection<Language> Languages
{
get { return languages; }
set
{
if (languages != value)
{
languages = value;
RaisePropertyChanged("Languages");
}
}
}
现在,除了将ItemsSource添加到ComboBox之外,所有这些工作都是有效的。 我发现很多例子显示了如何在CodeBehind中填充CB,但就像我说我想在MVVM样式中这样做:)我明白,ComboBox从DataForm继承了DataContext,并且此ItemsSource =“{Binding Path = Languages,Mode = TwoWay}“将不起作用,但我不知道如何实现我的目标。
有人能帮助我吗?
1)在资源部分声明viewmodel到视图。
<UserControl.Resources>
<local:MyViewModel x:Key="myViewModel" />
</UserControl.Resources>
2)将ComboBox绑定到viewmodel上的collection属性。
<ComboBox ItemsSource="{Binding Path=Languages,
Source={StaticResource myViewModel},
Mode=TwoWay}"/>
您可以将XAML中的数据上下文设置为静态资源,如下所示:
<UserControl.DataContext>
<Binding Source="{StaticResource myViewModel}" />
</UserControl.DataContext>
情景A: 1.假设你希望使用所有成员角色填充组合,并允许客户端选择角色并分配给用户:即ObjectA:Aspnet_Role ie ObjectB:User
让我们说User.MembershipRoleId是绑定到Aspnet_Role.RoleId
Dataform绑定到ObjectB
在XAML中写入以下内容:
<Combobox DisplayMemberPath="RoleName" SelectedValue="{Binding MembershipRoleId,Mode=TwoWay}" SelectedValuePath="RoleId" />
这里的映射是,ObjectB.MembershipRoleId = ObjectA.RoleId
方案B: 1.如果您不想按照ScenarioA中的方式显式定义,那么在这种情况下,请在数据库中的表之间定义ForeignKey-PrimaryKey关系,如ForeignKey - > User.MembershipId PrimaryKey - > Aspnet_Roles.RoleId 2 。从ADO.NET(.edmx)文件中,更新数据库中的模型,您会发现在User实体中存在一个根据实体Aspnet_Roles 3生成的关联。在XAML中,编写如下代码以绑定组合框, Dataform的所需字段
<Combobox DisplayMemberPath="RoleName" SelectedItem="{Binding MembershipRoleId,Mode=TwoWay}" .... />
链接地址: http://www.djcxy.com/p/44615.html
上一篇: Silverlight bind collection to Combobox in DataForm using MVVM