【问题标题】:TextBox not display value after ComboBox onChange (WPF, C#, Binding)ComboBox onChange(WPF、C#、Binding)后文本框不显示值
【发布时间】:2017-04-13 09:05:44
【问题描述】:

我有 UserControl 包含 ComboBox 和 TextBox:

 <ComboBox x:Name="cmbId" SelectionChanged="cmbId_SelectionChanged" />
 <TextBox x:Name="txb1" Visibility="Hidden" Text="{Binding Path=FirstName, UpdateSourceTrigger=PropertyChanged}" />

我已将值加载到 ComboBox:

  public MyDataView()
  {
            InitializeComponent();
            MyDBViewDataContext mydata = new MyDBViewDataContext();
            cmbId.ItemsSource = (from q in mydata.test_views
                                        select q.Id).ToList();
  }

当用户在 ComboBox 上选择项目时,TextBox 应该显示值:

private void cmbId_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
            int myId = 0;
            Int32.TryParse(cmbId.Text, out myId);

            txb1.Visibility = Visibility.Visible;

            MyDBViewDataContext myDataList = new MyDBViewDataContext();
            var queryAll = (from q in myDataList.test_views
                        where q.Id.Equals(myId)
                        select q);
 }

但它不起作用。缺少什么或我做错了什么?

【问题讨论】:

  • 您正在绑定一个名为 FirstName 的属性...您希望该名称来自哪里?
  • 你希望它做什么?
  • 你需要设置FirstName,那么你可能需要在FirstName的setter中引发NotifyPropertyChanged事件
  • 名字应该取自“queryAll”

标签: c# wpf linq data-binding combobox


【解决方案1】:

如果IdFirstName 都是实体类的属性,则可以将ComboBoxItemsSource 属性设置为IEnumerable&lt;YourEntityType&gt;,并将TextBoxText 属性绑定到ComboBoxSelectedItemFirstName 属性:

public MyDataView()
{
    InitializeComponent();
    MyDBViewDataContext mydata = new MyDBViewDataContext();
    cmbId.ItemsSource = (from q in mydata.test_views
                         select q).ToList();
}

<ComboBox x:Name="cmbId" DisplayMemberPath="Id"/>
<TextBox x:Name="txb1" Visibility="Hidden" Text="{Binding Path=SelectedItem.FirstName, UpdateSourceTrigger=PropertyChanged, ElementName=cmbId}" />

那么就完全不需要处理SelectionChanged事件了。

另一种选择是在事件处理程序中实际设置TextBoxText 属性:

txb1.Text = var queryAll = (from q in myDataList.test_views
                    where q.Id.Equals(myId)
                    select q.FirstName).FirstOrDefault();

【讨论】:

  • 谢谢,但是如何在您的第一个答案中,在选择组合框后使 TextBox 可见?
  • 这确实是另一个问题。您可以使用基于 Text 属性设置 Visibility 属性的样式。但是,如果您有其他问题,请提出一个新问题。
  • DataGrid 还有一个可以绑定的 SelectedItem 属性。
  • 它不起作用:/
  • 再次;如果您有其他问题,请提出一个新问题。不要在 cmets 中提出其他问题。
【解决方案2】:

您已将文本框与属性绑定,但我无法在您的代码中看到您是否正在设置属性。当您将属性设置为所选项目时,您的文本框将显示所选名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多