在我的ComboBox中,我有几种不同的语言(通过Binding)从数据库中加载。当ComboBox中的选择更改为另一种语言并且用户单击“确定”按钮时,我想做一些简单的事情,例如显示一个新窗口。我想用WPF Commands(Name_CanExecute和Name_Executed)来实现。昨天我整天都在玩,无法正常工作。我是Wpf和MVVM模式的新手。

如果有人可以告诉我该怎么做,我将非常感激。任何帮助表示赞赏。

c# - WPF ComboBox更改时触发命令-LMLPHP

我在“ View ”中的 .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


}

最佳答案

ComboBox.SelectedItem绑定(bind)到 View 模型上的属性,然后在您的命令中只需读取该属性值即可,而无需其他事件。如果没有单独的命令,而只想在更改时执行代码:将所述代码放在bound属性的setter中。

关于c# - WPF ComboBox更改时触发命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37984301/

10-14 18:09
查看更多