내 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>
와 뷰 모델 내 코드는 다음과 같습니다 :
보기에 내 .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
}
[MVVM에서 선택 상자를 어떻게 처리합니까?] (http://stackoverflow.com/questions/950501/how-do-you-handle-a-combobox-selectionchanged-in-mvvm) – JanDotNet