2016-06-23 2 views
1

내 ComboBox에는 데이터베이스에서로드되는 몇 가지 언어가 있습니다 (바인딩을 통해). ComboBox의 선택 항목이 다른 언어로 변경되고 사용자가 [확인] 버튼을 클릭하면 새 창을 표시하는 것과 같은 간단한 작업을 수행하려고합니다. WPF Commands (Name_CanExecute 및 Name_Executed)을 사용하여 이것을 실현하고 싶습니다. 나는 어제 하루 종일 놀고 있었고 작동시킬 수 없었다. Wpf 및 MVVM 패턴이 처음입니다.WPF ComboBox가 변경 될 때 명령을 실행하십시오.

누군가가 나를 어떻게하는지 보여줄 수 있으면 매우 감사 할 것입니다. 어떤 도움을 주셔서 감사합니다.

<UserControl x:Class="***.***.Modules.Localization.Views.LocalizationManager" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:***.***.Modules.Localization.Services" 
     xmlns:viewModels="clr-namespace:***.***.Modules.Localization.ViewModels" 
     Height="270" Width="230" 
     mc:Ignorable="d"> 
<UserControl.Resources> 
    <viewModels:LocalizationViewModelLocator x:Key="LocalizationViewModelLocator"/> 
</UserControl.Resources> 
<UserControl.DataContext> 
    <Binding Mode="OneWay" Path="LocalizationViewModel" Source="{StaticResource LocalizationViewModelLocator}"/> 
</UserControl.DataContext> 

<Grid Background="Gainsboro"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <StackPanel Orientation="Horizontal" Grid.Row="1" Margin="10,10"> 
     <TextBlock FontSize="13" FontFamily="Verdana" Text="Language: " /> 

     <ComboBox Name="CboLanguageSelector" BorderThickness="1" MinWidth="105" ItemsSource="{Binding Languages}" /> 

     <Button>OK</Button> 

    </StackPanel> 
</Grid> 

와 뷰 모델 내 코드는 다음과 같습니다 :

enter image description here

보기에 내 .xaml 코드는 다음과 같습니다

public class LocalizationViewModel : LocalizableViewModel 
    { 
     //the available languages from database are saved here 
     public ObservableCollection<string> Languages { get; private set; } 
     private readonly IDataAccessUnitOfWorkFactory dataAccessUnitOfWorkFactory; 
     public LocalizationViewModel(ILocalizationService localizationService, 
           IDataAccessUnitOfWorkFactory dataAccessUnitOfWorkFactory) : base(localizationService) 
    { 
     this.dataAccessUnitOfWorkFactory = dataAccessUnitOfWorkFactory; 
     LoadLanguagesFromCtlangTable(); 

    } 
    /// <summary> 
    /// Get the available languages from the CTLANG table 
    /// </summary> 
    private void LoadLanguagesFromCtlangTable() 
    { 
     using (var unitOfWork = dataAccessUnitOfWorkFactory.Create()) 
     { 
      string query = "SELECT languagename FROM ctlang ORDER BY languagename"; 
      Languages = new ObservableCollection<string>(unitOfWork.OwEntities.Database.SqlQuery<string>(query)); 
     } 
    } 
    //Implement Command_Execute and Command_CanExecute 


} 
+0

[MVVM에서 선택 상자를 어떻게 처리합니까?] (http://stackoverflow.com/questions/950501/how-do-you-handle-a-combobox-selectionchanged-in-mvvm) – JanDotNet

답변

2

Bind ComboBox.SelectedItem을보기 모델의 속성에 추가하면 명령에서 추가 속성이 필요없이 해당 속성 값을 읽을 수 있습니다. 별도의 명령이없고 변경시 코드를 실행하려는 경우 : 코드를 바운드 속성의 setter에 배치하십시오.

+0

나는 당신의 대답을 연구 할 것이고, 후에 내가 어떻게 문제를 해결할 지 게시 할 것이다. 감사 – Devid

관련 문제