簡體   English   中英

WPF 獲取綁定到 observablecollection 的選定組合框值

[英]WPF get selected Combobox value which is bound to observablecollection

我有一個綁定到ObservableCollectionComboBox (CBaddress)。

XAML

<ComboBox
   x:Name="CBaddress"
   Height="23"
   Margin="80,75,423,0"
   VerticalAlignment="Top" 
   ItemTemplate="{StaticResource AddressTemplate}"
   ItemsSource="{Binding}"
/>

<DataTemplate x:Key="AddressTemplate">
   <StackPanel Orientation="Horizontal">
      <TextBlock Width="50" Text="{Binding Path=ID_}" />
      <TextBlock Width="100" Text="{Binding Path=Address_}" />
      <TextBlock Width="30" Text="{Binding Path=HouseNumber_}" />
      <TextBlock Width="40" Text="{Binding Path=PostalCode_}" />
      <TextBlock Width="150" Text="{Binding Path=State_}" />
   </StackPanel>
</DataTemplate>

ObservableCollection由一個class (地址)組成。

class Address
{
   public int ID_ { get; set; }
   public string Country_ { get; set; }
   public string State_ { get; set; }
   public int PostalCode_ { get; set; }
   public string Address_ { get; set; }
   public int HouseNumber_ { get; set; }
}

當我的程序啟動時,它會從數據庫中加載所有值,並且可以在ComboBox完美顯示所有值:

CBaddress.DataContext = database.SelectAllAddresses();

但是我如何獲得這些值? 使用CBaddress.Text我只得到這個輸出:

MySQL_WPF.classes.Address

是否可以獲取也顯示在ComboBox的純文本?

如果我能從選定的值中獲得某個值,比如ID_ ,那將是最好的。

如果要獲取所選項目,請使用ComboBox上的SelectedItem屬性訪問它。

var selectedID = ((Address)CBaddress.SelectedItem).ID_ ;

SelectedItem屬性屬於object類型,因此您需要將其強制轉換為您的數據類型Address 然后您可以像往常一樣訪問它的任何屬性。

如果您在 MVVM 場景中工作,您會將SelectedItem綁定到視圖模型上的屬性,例如SelectedAddress

<ComboBox ...
          ItemsSource="{Binding}"
          SelectedItem={Binding SelectedAddress}"/>
private Address _selectedAddress;
public Address SelectedAddress
{
   get => _selectedAddress;
   set
   {
      if (_selectedAddress == value)
         return;

      _selectedAddress = value;
      OnPropertyChanged();
   }
}

然后您可以以相同的方式訪問任何屬性,例如:

var selectedID = SelectedAddress.ID_;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM