我正在开发一个项目,我想为某些对象类型创建窗口以添加/编辑目的。我无法按照我想要的方式安静地完成这项任务。我创建了UI并使用双向绑定和UpdateSourceTrigger = PropertyChanged来处理名称,必需和它的工作。我无法做的是在单击“保存”按钮时绑定OneWay并触发源更新。
我知道可以通过调用每个绑定的UpdateSource来完成。但我想应该有一个更容易的方法来做这个,像this.DataContext.UpdateSource()等整个窗口。在创建窗口对象之后和调用show函数之前,我将窗口的DataContext设置为InputDefinition对象。
我不是在寻找完整的解决方案代码。虽然我找不到一个好的解决方案,但我觉得这应该是一个非常常见的用例。只需指出方向,我将从那里开始。
前:
public class InputDefinition
{
string name;
bool required;
ObservableCollection<Column> columns;
}
public class Column{
string name;
string dataType;
}
窗口:名称的文本框,必填的复选框,列的列表视图(带有文本框名称和组合框数据类型)和用于保存更改的按钮。
Name: ################
Required: # |SAVE|
Id Name DataType
# #### ########
# #### ########
# #### ########
# #### ########
以下代码适用于我正在尝试的内容。但应该有一个更简单的方法。如果我的类/窗口(类的视图)有10个带绑定的用户控件怎么办?对此有何推荐?
private void SaveInputDefinition_Click(object sender, RoutedEventArgs e)
{
NameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
FileMatchTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
RequiredCheckBox.GetBindingExpression(CheckBox.IsCheckedProperty).UpdateSource();
Columns.GetBindingExpression(ListView.ItemsSourceProperty).UpdateSource();
}