WPF,请看下这个数据绑定
<Window.DataContext>
<local:Person />
</Window.DataContext>
<Grid HorizontalAlignment="Left" Height="519" VerticalAlignment="Top" Width="927">
<ListBox Name="listbox1" ItemsSource="{Binding list}" SelectedItem="{Binding SelectString}" HorizontalAlignment="Left" Height="182" Margin="114,63,0,0" VerticalAlignment="Top" Width="124"/>
<TextBox Text="{Binding ElementName=listbox1, Path=SelectedItem}" HorizontalAlignment="Left" Height="24" Margin="305,154,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
</Grid>
class Person
{
public List<string> list { get; set; }
public string SelectString { get; set; }
public Person()
{
list = new List<string>() { "aa", "bb", "cc" };
SelectString = "";
}
}
上面代码中个,listbox绑定到Person类的list属性,正常显示了数据。不过,SelectedItem是绑定到Person类的SelectString属性上的,TextBox又是绑定到SelectedItem的。SelectString属性一直都是空字符串,绑定类型也是单向绑定,
所以,SelectedItem也应该一直是空字符串吧,所以,就应该一直没有选中项的吧,为什么TextBox却显示了的呢?
------解决方案-------------------- 如果没有匹配的值,那么SelectItem不会改变选中项目。
------解决方案-------------------- SelectedItem绑定了SelectString, 默认的是双向绑定。你可以通过改变SelecteString来改变ListBox中的SelectedItem(但你这里要重新打开才能看到,因为你没有继承Inotifypropertychaged接口),也可以通过点击ListBox中的选项来更新SelecteString. 所以,并不是说你设置好SelecteString后,就没有办法在ListBox中点击选项了。
理解了上面一点,你的textbox绑定到SelectedItem就没什么问题了,selectedItem改变后,textbox内容会跟着变。
------解决方案-------------------- 引用: Quote: 引用:
SelectedItem默认是双向绑定吗?我目前只知道TextBox的Text属性和CheckBox的IsChecked属性是双向的,请问还有哪些是默认双向的呢?请举几个例子
这个也是根据情况来的。
一般允许修改的属性都是默认双向绑定的,比如你提到的textbox.
如果只读的话,那默认就是单向绑定的,比如TextBlcok.