gpt4 book ai didi

c# - 通过数据绑定(bind) WPF/MVVM 从从数据库填充的组合框中获取所选值,以进行比较

转载 作者:行者123 更新时间:2023-12-03 10:31:49 26 4
gpt4 key购买 nike

我是 C# 的初学者;该项目是在 Visual Studio (wpf) 中使用 Entity Framework 和 View 模型制作的。我已经从我的数据库中填充了一个仅包含“员工”名称的组合框。我想要做的是在变量中获取所选项目的值(或直接将其与存储在数据库中的名称进行比较,以获取与该名称关联的所有其他表列;在我的情况下,我有年龄,属性..等)

如果我直接进入 MainWindow.xaml.cs ,我可以轻松使用
Object selectedItem = ComboBoxName.SelectedItem;它完成了工作。但是,我需要在我的 MainWindowsViewModel.cs 中实现它。 .我发现了 SelectedItem="{Binding ..., Mode=...}"并尝试了几种解决方案,但我找不到任何工作。

我在 XAML 中的组合框:

 <ComboBox x:Name="comboPersonal" Grid.Column="6" HorizontalAlignment="Left" Margin="13,60,-62,0" Grid.Row="1" VerticalAlignment="Top" Width="183" ItemsSource="{Binding ang1}" SelectedItem="{Binding Path=Employers, Mode=TwoWay}"  />

组合框通过以下方式填充:
 public IList<string> ang1
{
get
{
using (ProbaHotel_1Entities db = new ProbaHotel_1Entities())
{
var employee = db.Personal.Select(ang => ang.Nume).ToList();



return employee.ToList();
}
}
}

在我的 MainWindowViewModel(大部分是错误的)中:
 public IList<string> Employers
{
get
{
using (ProbaHotel_1Entities db = new ProbaHotel_1Entities())
{
var vNume = db.Personal.Select(ang => ang.Nume);
this.NumeText = vNume.ToString();

}
return this.Employers;
}

set { }
}
NumeText是文本框绑定(bind)到的变量。当我从 ComboBox 中选择一个项目时,我希望将该值传输到文本框。
Select 语句缺少 WHERE比较 selected valuenames in the database
文本框 XAML:
<TextBox x:Name="text_nume" HorizontalAlignment="Left" Height="23"  TextWrapping="Wrap" Text="{Binding NumeText}" VerticalAlignment="Top" Width="89" Grid.Column="1" Grid.Row="0" />

在我的 MainWindowViewModel 中:
private string numeText;
public string NumeText
{
get
{
return this.numeText;
}
set
{

this.numeText = value;
}
}

最佳答案

您可以使用包含模型的 List 并绑定(bind)到组合框 itemsource,您可以将 DisplayMemberPath 绑定(bind)为“名称”,这是模型的属性,并将 SelectedItem 绑定(bind)到此模型。

请看代码。我使用了虚拟字符串值。在您的情况下,这应该从您提到的 DB 中填充。请注意,在 SelectedEmployee 的 setter 中,我根据您的要求为 NumText 赋值。一旦选定的项目发生变化,这将被分配并显示在 XAML 文本框中

在您的情况下,您错误地将 SelectedItem 分配给 list 。它应该与您绑定(bind)的 itemsource 相关。您为 itemsource 创建了单独的列表,为选定的项目创建了一个。而且我在您的代码中看不到与 INotifyPropertyChanged 相关的属性 setter 的任何更改。

XAML:

<Window x:Class="WpfApplication13.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication13"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50*"/>
<RowDefinition Height="50*"/>
</Grid.RowDefinitions>
<TextBox x:Name="text_nume" HorizontalAlignment="Center" Height="23" TextWrapping="Wrap" Text="{Binding NumeText}" VerticalAlignment="Center" Width="89" Grid.Row="0" />
<ComboBox x:Name="comboPersonal" Grid.Row="1" Height="30" Width="100" HorizontalAlignment="Center" DisplayMemberPath="Name" VerticalAlignment="Center" Margin="13,60,-62,0" ItemsSource="{Binding Ang1}" SelectedItem="{Binding SelectedEmployee}" />
</Grid>
</Window>

View 模型:
 public class ViewModel : INotifyPropertyChanged
{

#region Constants and Enums

#endregion

#region Private and Protected Member Variables
private IList<EmployeeModel> ang1;
EmployeeModel _selectedEmployee;
private string numeText;
#endregion

#region Private and Protected Methods
private void OnPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
#endregion

#region Constructors
public ViewModel()
{
Ang1 = new List<EmployeeModel>();
Ang1.Add(new EmployeeModel() { Name="1"});
Ang1.Add(new EmployeeModel() { Name = "2" });
}
#endregion

#region Public Properties
public IList<EmployeeModel> Ang1
{
get
{
return ang1;
}
set
{
ang1 = value;
OnPropertyChanged(nameof(Ang1));
}
}

public EmployeeModel SelectedEmployee
{
get
{
return _selectedEmployee;
}
set
{
_selectedEmployee = value;
NumeText = value.Name;
OnPropertyChanged(nameof(SelectedEmployee));
}
}

public string NumeText
{
get
{
return this.numeText;
}
set
{

this.numeText = value;
OnPropertyChanged(nameof(NumeText));
}
}
#endregion

#region Public Methods
public event PropertyChangedEventHandler PropertyChanged;

#endregion


}

模型:
 public class EmployeeModel
{
public string Name { get; set; }
}

我使用 INotifyPropertyChanged 来绑定(bind)通知。让我知道这是否有帮助

关于c# - 通过数据绑定(bind) WPF/MVVM 从从数据库填充的组合框中获取所选值,以进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57117351/

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