我有一个List<>我绑定到ListBox的对象。然后我想将SelectedValue的属性绑定到各种TextBoxes。但这种行为非常棘手。
当绑定用作ListBox的DisplayMember的Name(字符串)时,它不会更新ListBox,如果我尝试刷新TextChanged事件的绑定,则在选择更改之前它不会更新然后在切换选择时遇到问题。
当绑定Balance(十进制)时,它会更改所有这些(或者,当我更改选择时,可能会应用更改,但实际上它正在更改数据,而不仅仅是更新)。
要清楚,我使用的是C#.NET,而不是ASP。
答案 0 :(得分:1)
假设WPF,快速示例:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ListBox x:Name="list"
ItemsSource="{Binding}"
DisplayMemberPath="Name"/>
<TextBox Text="{Binding ElementName=list, Path=SelectedItem.Name}"
Grid.Row="1"/>
<TextBox Text="{Binding ElementName=list, Path=SelectedItem.Val}"
Grid.Row="2" />
</Grid>
</Window>
namespace WpfApplication1 {
public class Thing : INotifyPropertyChanged {
private string _name;
private double _val;
public string Name {
get { return _name; }
set {
_name = value;
OnPropertyChanged("Name");
}
}
public double Val {
get { return _val; }
set {
_val = value;
OnPropertyChanged("Val");
}
}
protected void OnPropertyChanged(string propertyName) {
PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if (propertyChanged != null) {
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
DataContext = new List<Thing> { new Thing { Name = "A", Val = 1.0 }, new Thing { Name = "B", Val = 2.0 } };
}
}
}
答案 1 :(得分:0)
我在Switch on the Code找到了解决方案。基本上,我需要使用BindingList集合而不仅仅是List。