簡體   English   中英

無法將選擇綁定到WPF組合框

[英]Can't bind selection to WPF Combobox

我想要一個帶有兩個選項“ M”和“ F”的ComboBox,並用一個值之一的字符串設置我的代碼中的選擇。 這似乎很基礎,甚至問也很尷尬。 但是,我還沒有看到一個不包含50行代碼以及自定義類等的示例。為了使事情變得更加簡單,我想在XAML中預填充這兩個選項。 為什么這個簡單的任務使我感覺像個精神上的侏儒? 這就是我所擁有的:

<ComboBox x:Name="cboGender"  >
    <ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
    <ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>

代碼背后:

cboGender.SelectedValue = "M";

在搗毀計算機並永久返回ASP.NET開發之前,請提供幫助。

請嘗試以下操作:

cboGender.ItemsSource = new string [] { "M", "F" };
cboGender.SelectedItem = "M";

您需要將ItemsSource設置為項目集合。 然后,ComboBox將為您生成ComboBoxItems。

添加SelectedValuePath ,它可以工作:

<ComboBox x:Name="cboGender" SelectedValuePath="Content" >
    <ComboBoxItem Tag="M" Content="M"></ComboBoxItem>
    <ComboBoxItem Tag="F" Content="F"></ComboBoxItem>
</ComboBox>

SelectedValuePath="Tag"也會起作用,盡管在兩種情況下在兩個地方使用相同的數據似乎都是多余的


作為旁注,類似於Colin的答案,您可以設置以下項:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
<ComboBox x:Name="cboGender">
    <sys:String>M</sys:String>
    <sys:String>F</sys:String>
</ComboBox>

在這種情況下, SelectedItemSelectedValue工作

試試這個cboGender.SelectedIndex = 0; 在粉碎系統之前.. :)

大致來說,如果您曾經在代碼中操縱WPF UI元素,那就錯了。 當然,您可以創建一個帶有“ M”和“ F”的組合框並預設其選擇:

<ComboBox>
  <ComboBoxItem>M</ComboBoxItem>
  <ComboBoxItem>F</ComboBoxItem>
  <ComboBox.SelectedIndex>0</ComboBox.SelectedIndex>
</ComboBox>

但是那又怎樣呢? 您如何處理該選擇? 如果您的答案涉及以下內容:

if cboGender.SelectedValue == "M"

您要走的路會導致您編寫很難維護的程序。

另一方面,如果您創建一個類來將UI綁定到該類,如下所示:

public class MyViewModel
{
   public MyViewModelClass()
   {
      Gender = "M";
   }

   public IEnumerable<string> Genders { get { return new string[] { "M", "F" } };

   public string Gender { get; set; }
}

然后,您的MyViewModel假設您已將DataContext設置為MyViewModel的實例, MyViewModel變為:

<ComboBox ItemsSource="{Binding Genders}" SelectedValue="{Binding Gender}"/>

現在,使用Gender屬性的任何其他邏輯都將查看此類,而不是UI。 因此,您可以在不影響邏輯的情況下更改UI,反之亦然。

(請注意,盡管視圖模型通常實現INotifyPropertyChanged ,但僅當您要在代碼中更改Gender並希望新值反映在UI中時,才要這樣做。)

暫無
暫無

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

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