ComboBox.SelectedValue没有从绑定源更新的内容

29 浏览
0 Comments

ComboBox.SelectedValue没有从绑定源更新的内容

下面是我的绑定源对象:

Public Class MyListObject
    Private _mylist As New ObservableCollection(Of String)
    Private _selectedName As String
    Public Sub New(ByVal nameList As List(Of String), ByVal defaultName As String)
        For Each name In nameList
            _mylist.Add(name)
        Next
        _selectedName = defaultName
    End Sub
    Public ReadOnly Property MyList() As ObservableCollection(Of String)
        Get
            Return _mylist
        End Get
    End Property
    Public ReadOnly Property SelectedName() As String
        Get
            Return _selectedName
        End Get
    End Property
End Class

这是我的XAML:


    
        
    
    
        
        
        
    

这是代码后台:

Class Window1
    Private obj1 As MyListObject
    Private obj2 As MyListObject
    Private odp As ObjectDataProvider
    Public Sub New()
        InitializeComponent()
        Dim namelist1 As New List(Of String)
        namelist1.Add("Joe")
        namelist1.Add("Steve")
        obj1 = New MyListObject(namelist1, "Steve")
        
        Dim namelist2 As New List(Of String)
        namelist2.Add("Bob")
        namelist2.Add("Tim")
        obj2 = New MyListObject(namelist2, "Tim")
        odp = DirectCast(Me.FindResource("MyListObject"), ObjectDataProvider)
        odp.ObjectInstance = obj1
    End Sub
    Private Sub btn_List1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btn_List1.Click
        odp.ObjectInstance = obj1
    End Sub
    Private Sub btn_List2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btn_List2.Click
        odp.ObjectInstance = obj2
    End Sub
End Class

当窗口首次加载时,绑定正常工作。ComboBox中包含名称“Joe”和“Steve”,默认情况下选择“Steve”。然而,当我点击按钮将ObjectInstance切换为obj2时,ComboBox的ItemsSource在下拉列表中正确填充,但SelectedValue被设置为Nothing,而不是等于obj2.SelectedName。

0
0 Comments

问题描述:ComboBox的SelectedValue属性没有从绑定源更新。

问题原因:在绑定时,没有显式地设置UpdateSourceTrigger为PropertyChanged。默认情况下,UpdateSourceTrigger的值为LostFocus,因此当绑定的属性值发生变化时,ComboBox的SelectedValue属性不会立即更新。

解决方法:在绑定中设置UpdateSourceTrigger为PropertyChanged,并将Mode设置为TwoWay。通过这样的设置,当绑定的属性值发生变化时,ComboBox的SelectedValue属性会立即更新。

示例代码如下:


通过以上设置,ComboBox的SelectedValue属性会在绑定的属性值发生变化时立即更新,解决了ComboBox.SelectedValue not updating from binding source的问题。

0
0 Comments

问题的原因是ComboBox的SelectedValue属性没有从绑定源更新。这可能是因为ComboBox的SelectedValue属性绑定的是ComboBox的SelectedValue属性,而不是ComboBox的Text属性。所以当你选择一个新的项时,ComboBox的Text属性会更新,但是ComboBox的SelectedValue属性不会更新。

解决这个问题的方法是将ComboBox的SelectedValue属性绑定到ComboBox的Text属性,而不是ComboBox的SelectedValue属性。这样,当你选择一个新的项时,ComboBox的Text属性会更新,然后通过绑定将更新的值传递给ComboBox的SelectedValue属性。

以下是修改后的代码:


     
     
     

public class TestCode
{
    private string _test;
    public string Test 
    { 
      get { return _test; }
      set
      {
         _test = value;
         NotifyPropertyChanged(() => Test); // NotifyPropertyChanged("Test"); if not using Caliburn
      }
    }
}

通过这种修改,当你选择一个新的项时,ComboBox的Text属性会更新,然后通过绑定将更新的值传递给ComboBox的SelectedValue属性,从而解决了ComboBox.SelectedValue属性不更新的问题。

0
0 Comments

问题:ComboBox的SelectedValue绑定源没有更新。

原因:根据文章中的讨论,发现SelectedValue在更新其内部时存在问题。如果设置SelectedValue,它不会看到变化,而是必须设置SelectedItem才能正确更新。作者的结论是SelectedValue设计用于获取操作而不是设置操作,但这可能只是3.5sp1 .net当前版本中的一个bug。同样在.NET 4中仍存在此问题,最好只依赖于SelectedItem而不是SelectedValue。作者在.NET 4.5中也遇到了SelectedValue的问题,对他来说,SelectedItem也解决了问题。还有一个用户遇到了与之相反的问题,他只使用SelectedItem而不使用SelectedValue,但这个回答解决了问题,它实际上做了这两个人认为SelectedValue应该做的事情,但对问题的原因有误解。问题是SelectedValue需要SelectedValuePath,这在文档中有记录。SelectedValue和SelectedItem执行不同的操作。另外,通过将UpdateSourceTrigger设置为PropertyChanged来解决了这个问题,这在我的情况下有效。我认为我需要设置这个值实在太荒谬了。

解决方法:根据文中的讨论,解决这个问题的方法主要有两种:

1. 使用SelectedItem代替SelectedValue来进行绑定操作。

2. 在SelectedValue的绑定中添加UpdateSourceTrigger=PropertyChanged来更新绑定源。

以上就是关于ComboBox的SelectedValue绑定源没有更新问题的原因和解决方法的整理。

0