2016-06-23 9 views
1

私のComboBoxには、データベースから読み込まれる言語がいくつかあります(Bindingを介して)。 ComboBoxの選択が別の言語に変更され、ユーザーが[OK]ボタンをクリックすると、新しいウィンドウを表示するような簡単な操作を行いたいと思います。私はWPF Commands(Name_CanExecuteとName_Executed)でこれを実現したいと思います。私は昨日一日中遊んでいて、それを動作させることができませんでした。私はWpfとMVVMのパターンに新しいです。WPF ComboBoxが変更されたときにコマンドを実行します。

誰かに私にそれを行う方法を示すことができたら、私は非常に感謝します。どんな助けもありがとうございます。

enter image description here

ビューでマイの.xamlコードは次のようになります。

<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> 

とViewModelにの私のコードは次のようになります。

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でコンボボックスSelectionChangedをどのように処理するのですか?](http://stackoverflow.com/questions/950501/how-do-you-handle-a-combobox-selectionchanged-in-mvvm) – JanDotNet

答えて

2

Bind ComboBox.SelectedItemをあなたのビューモデルのプロパティに追加すると、そのプロパティの値を読み込むだけで、追加のイベントは必要ありません。別のコマンドがなく、変更時にコードを実行したいだけの場合:バインドされたプロパティの設定ツールにコードを挿入します。

+0

私はあなたの答えを勉強します、その後、私は問題をどのように解決したのかここに投稿します。ありがとう – Devid

関連する問題