gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:27:04 24 4
gpt4 key购买 nike

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

如果有人能告诉我怎么做,我将不胜感激。任何帮助表示赞赏。

enter image description here

我的 .xaml 代码 在 View 中看起来像这样:

<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


}

最佳答案

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com