2个回答
展开全部
你好:
一、错误原因
TextBox绑定方式(Mode)默认为TwoWay。
如果没有为Binding指定Path,就会使用当前源的Object.ToString()。
在你的例子中,TextBox属性Text的值是通过Items中的每项的ToString()方法获得的;
由于Mode=TwoWay,目标Text的值要返回给源,但能返回给Object.ToString()吗?所以出错了。
参考:
二、修正方法
Mode=OneWay
<TextBox Text="{Binding Mode=OneWay}"/>
指定Path
<TextBox Text="{Binding Path=.}"/>
通过一层包装
展开全部
TextBox是编辑控件,默认的绑定时twoway的双向绑定,而你数据源集合的元素是string对象,string是个特殊的对象,定义是对象,用起来确是值类型。简单的说你集合元素不能用直接用值类型来做双向绑定,比如string的绑定的时候值给了textbox,但是textbox的text要应用回数据源的时候就没有了对象引用,
string -> textbox.text 此时text是个独立的值,text和拷贝了数据源的string值,而不是引用
textbox.text ->?string 找不到对象引用了。
要使用textbox需要将items的元素用一个引用对象包装起来,顶一个class T{public string Text { get; set; }}
集合换成
public System.Collections.ObjectModel.ObservableCollection<T!这里换成T对象> Items
{
get { return (System.Collections.ObjectModel.ObservableCollection<T>)GetValue(ItemsProperty); }
set { SetValue(ItemsProperty, value); }
}
// Using a DependencyProperty as the backing store for Items. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ItemsProperty =
DependencyProperty.Register("Items", typeof(System.Collections.ObjectModel.ObservableCollection<T>), typeof(MainWindow), new PropertyMetadata(new System.Collections.ObjectModel.ObservableCollection<T>()));
初始化
Items = new System.Collections.ObjectModel.ObservableCollection<T>();
Items.Add(new T() { Text = "1" });
Items.Add(new T() { Text = "2" });
Items.Add(new T() { Text = "3" });
绑定
<TextBox Text="{Binding Text}"></TextBox>
你的明白?
string -> textbox.text 此时text是个独立的值,text和拷贝了数据源的string值,而不是引用
textbox.text ->?string 找不到对象引用了。
要使用textbox需要将items的元素用一个引用对象包装起来,顶一个class T{public string Text { get; set; }}
集合换成
public System.Collections.ObjectModel.ObservableCollection<T!这里换成T对象> Items
{
get { return (System.Collections.ObjectModel.ObservableCollection<T>)GetValue(ItemsProperty); }
set { SetValue(ItemsProperty, value); }
}
// Using a DependencyProperty as the backing store for Items. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ItemsProperty =
DependencyProperty.Register("Items", typeof(System.Collections.ObjectModel.ObservableCollection<T>), typeof(MainWindow), new PropertyMetadata(new System.Collections.ObjectModel.ObservableCollection<T>()));
初始化
Items = new System.Collections.ObjectModel.ObservableCollection<T>();
Items.Add(new T() { Text = "1" });
Items.Add(new T() { Text = "2" });
Items.Add(new T() { Text = "3" });
绑定
<TextBox Text="{Binding Text}"></TextBox>
你的明白?
追问
你说的很好!但是采纳的答案格式更好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询