Silverlight使用MVVM将集合绑定到DataForm中的Combobox

mic*_*jas 2 data-binding silverlight combobox mvvm dataform

我有这个问题,我有使用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>
Run Code Online (Sandbox Code Playgroud)

所有这些都由具有以下属性的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");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,除了将ItemSource添加到ComboBox之外,所有这些都有效.我发现很多例子显示如何在CodeBehind中填充CB,但就像我说我想在MVVM-Style中这样做:)我明白,ComboBox从DataForm继承了DataContext,而这个ItemsSource ="{Binding Path = Languages,Mode = TwoWay}"不起作用,但我不知道如何实现我的目标.

有人能帮助我吗?

Dav*_*veB 6

1)将视图模型声明为资源部分中的视图.

<UserControl.Resources>
    <local:MyViewModel x:Key="myViewModel" />
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

2)将ComboBox绑定到viewmodel上的collection属性.

<ComboBox ItemsSource="{Binding Path=Languages, 
                                Source={StaticResource myViewModel}, 
                                Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)