您好 我正在开发一个MVVM Silverlight应用程序,我使用TextBox的UpdateSourceTrigger属性来更新运行时的bindingexpression,如下所示:
.xaml.cs:
BindingExpression beID = txtEmpID.GetBindingExpression(TextBox.TextProperty); beID.UpdateSource();
BindingExpression beAge = txtAge.GetBindingExpression(TextBox.TextProperty); beAge.UpdateSource();
的.xaml:
<Grid x:Name="LayoutRoot"
Background="White"
DataContext="{Binding Source={StaticResource keyEMPVM},
UpdateSourceTrigger=Explicit}">
//<Grid.RowDefinitions>
//<Grid.ColumnDefinitions>
<sdk:Label Grid.Row="2"
Grid.Column="1"
Target="{Binding ElementName=txtEmpID}" />
<TextBox x:Name="txtEmpID"
Grid.Row="2"
Grid.Column="2"
Style="{StaticResource ContentTextBoxStyle}"
Text="{Binding emp.ID, Mode=TwoWay, ValidatesOnExceptions=True,
ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=Explicit}" />
<sdk:Label Grid.Row="4"
Grid.Column="1"
Target="{Binding ElementName=txtAge}" />
<TextBox x:Name="txtAge"
Grid.Row="4"
Grid.Column="2"
Style="{StaticResource ContentTextBoxStyle}"
Text="{Binding emp.Age, Mode=TwoWay, ValidatesOnExceptions=True,
ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=Explicit}" />
<Button x:Name="btnSubmit"
Grid.Row="6"
Grid.Column="1"
Grid.ColumnSpan="2"
Style="{StaticResource ContentButtonStyle}"
Content="Submit"
Command="{Binding Path=UpdateEmployee}"
CommandParameter="{Binding emp.ID}" />
在这种情况下,我为每个文本框手动执行bindingexpressions。有没有办法在单个实例中为网格内的所有文本框控件执行bindingexpressions。
答案 0 :(得分:0)
如果您想更新网格中的每个 TextBox
,可以使用以下代码:
private void LayoutRoot_KeyDown(object sender, KeyEventArgs e)
{
var grid = (Grid)sender;
foreach (var tb in GetChildren<TextBox>(grid))
{
var be = tb.GetBindingExpression(TextBox.TextProperty);
if(be != null) be.UpdateSource();
}
}
public IEnumerable<T> GetChildren<T>(DependencyObject d) where T:DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(d);
for(int i = 0; i < count; i++)
{
var c = VisualTreeHelper.GetChild(d, i);
if (c is T)
yield return (T)c;
foreach (var c1 in GetChildren<T>(c))
yield return c1;
}
}
KeyDown事件只是一个例子。 也许递归不是解决问题的最佳方法,但这是最简单的方法