1 回答

TA貢獻1824條經驗 獲得超6個贊
您可以使用包含模型的 List 并綁定到組合框項目源,并且可以綁定 DisplayMemberPath 來表示“Name”(模型的屬性)并將 SelectedItem 綁定到該模型。
請看代碼。我使用了虛擬字符串值。在您的情況下,這應該是從數據庫填充的,正如您提到的。請注意,在 SelectedEmployee 的設置器中,我根據您的要求為 NumText 分配值。一旦選定的項目發生更改,它將被分配并顯示在 XAML 文本框中
在您的情況下,您錯誤地將 SelectedItem 分配給 list 。它應該與您綁定的itemsource相關。您創建了單獨的列表,一個用于項目源,另一個用于所選項目。而且我在代碼中看不到與 INotifyPropertyChanged 相關的屬性設置器的任何更改。
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>
視圖模型:
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 來綁定通知。讓我知道這是否有幫助
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報