我想将ListViews SelectedItem绑定到我的TextBox ..我做的是以下内容:
private User _selectedUser;
public User SelectedUser
{
get { return _selectedUser; }
set
{
_selectedUser = value;
RaisePropertyChanged("SelectedUser");
}
}
ListView Xaml:
<ListView HorizontalAlignment="Left"
Height="194"
Margin="37,102,0,0"
SelectedItem="{Binding SelectedItem}"
Textbox Xaml:
<TextBox Text="{Binding SelectedItem.FirstName}" />
如果我从列表视图中选择了一个条目,它会在文本框中显示所选条目的名称值。应该是这样,没问题。
问题是:我想编辑文本框中的文本,当我按下按钮时,它应该使用我在文本框中输入的名称更新选择名称。 只有按下按钮才会这样做,但是当我从文本框中失去焦点时,它现在已经更改了条目名称。
我该如何解决?我已经尝试了所有不同的模式,但似乎没有任何工作
答案 0 :(得分:1)
这正是你正在告诉它要做的事情。 ListView和TextBox都绑定到完全相同的东西。因此,当您更改一个时,更改立即反映出来。
如果你想达到你想要的听起来,你需要将FirstName
复制到另一个属性(让我们称之为SelectedFirstName
),允许用户编辑TextBox中的值,然后当用户单击按钮时,使用FirstName
SelectedFirstName
属性
答案 1 :(得分:0)
来自MSDN:
TextBox.Text属性的默认UpdateSourceTrigger值为 引发LostFocus。这意味着如果应用程序具有带有的TextBox 数据绑定TextBox.Text属性,您在TextBox中键入的文本 在TextBox失去焦点之前不会更新源(for 例如,当您单击TextBox时。)
如果您希望在其他时间更新您的来源(而不是在TextBox
失去焦点时),您应该使用UpdateSourceTrigger
属性。例如,您可以说明<TextBox Text="{Binding SelectedItem.FirstName, UpdateSourceTrigger=Explicit}" />
,然后仅在按下按钮时调用UpdateSource
方法。阅读文档链接了解详细信息:
如果您有对话框或用户可编辑的表单,并且您想要推迟 源更新,直到用户完成编辑字段和 单击“确定”,您可以设置您的UpdateSourceTrigger值 绑定到Explicit,如下例所示:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
将UpdateSourceTrigger值设置为Explicit时,源 值仅在应用程序调用UpdateSource方法时更改。 以下示例显示如何为其调用UpdateSource itemNameTextBox:
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();