문제

이 문제가 있습니다. MVVM을 사용하여 Silverlight 앱을 작성했습니다. ViewModel의 속성에 부드러운 데이터 폼을 만들어야하며 Combobox를 추가하고 동일한 뷰 모델의 다른 컬렉션의 값으로 채우고 싶습니다.

암호:

<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");
            }
        }
    }

이제이 모든 것은 Combobox에 ItemsSource를 추가하는 것 외에 작동합니다. CodeBehind에서 CB를 채우는 방법을 보여주는 많은 예를 찾았지만 MVVM 스타일 로이 작업을하고 싶다고 말했듯이 :) 이해합니다. : ComboBox는 DataForm에서 DataContext를 상속 받았으며이 ItemsSource = "{바인딩 경로 = 언어, 모드입니다. = twoway} "는 작동하지 않지만 목표를 달성하는 방법은 모르겠습니다.

누군가 나를 도울 수 있습니까?

도움이 되었습니까?

해결책

1) 뷰 모델을 리소스 섹션의 뷰로 선언합니다.

<UserControl.Resources>
    <local:MyViewModel x:Key="myViewModel" />
</UserControl.Resources>

2) Combobox를 뷰 모델의 수집 특성에 바인딩합니다.

<ComboBox ItemsSource="{Binding Path=Languages, 
                                Source={StaticResource myViewModel}, 
                                Mode=TwoWay}"/>

다른 팁

XAML의 데이터 컨텍스트를 다음과 같은 정적 자원으로 설정할 수 있습니다.

<UserControl.DataContext>
    <Binding Source="{StaticResource myViewModel}" />
</UserControl.DataContext>

시나리오 A :1. 모든 멤버십 역할로 콤보를 채우고 클라이언트가 역할을 선택하고 사용자에게 할당하도록 허용합니다. IE Objecta : ASPNET_ROLE IE OBJECTB : 사용자에게 할당하십시오.

  1. 말합시다 user.membershiproleid 묶여 있어야합니다 aspnet_role.roleid

  2. DataForm은 ObjectB에 바인딩됩니다

  3. Dataform의 Combobox에는 목록이 채워져 있습니다
  4. XAML에서 다음을 작성하십시오.

    <Combobox DisplayMemberPath="RoleName" SelectedValue="{Binding MembershipRoleId,Mode=TwoWay}" SelectedValuePath="RoleId" />

여기서 매핑은 ObjectB.Membershiproleid = Objecta.roleid입니다

시나리오 B :1. 시나리오에서 명시 적으로 정의하지 않으려면이 경우 외국 키와 같은 데이터베이스의 테이블 사이의 외국 키 프리마리 키 관계를 정의합니다. ado.net (.edmx) 파일, 데이터베이스에서 모델을 업데이트하면 사용자 엔티티 엔티티에 대한 협회가 있습니다 aspnet_roles3. XAML에서 Combobox를 바인딩하기 위해 아래와 같이 코드를 작성하십시오.

<Combobox DisplayMemberPath="RoleName" SelectedItem="{Binding MembershipRoleId,Mode=TwoWay}" .... />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top