我有一个可重用的用户控件,用于使用带有 DependencyProperty SelectedCulture 的组合框选择语言。然后,我使用包含 UserViewModel 集合的 UsersViewModel 在 DataGrid 中显示用户列表的另一个控件。一列是包含语言选择控件的 DataGridTemplateColumn。我将属性 SelectedCulture 绑定到 UserViewModel 的属性,但除非 UpdateSourceTrigger 设置为 PropertyChanged,否则绑定不会更新 UserViewModel 的值。
为什么不?不应该是 PropertyChanged 默认值吗?
语言选择视图:
<UserControl x:Class="MyControls.LanguageSelectView" ... >
...
<ComboBox
ItemsSource="{Binding ViewModel.AvailableCultures, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:LanguageSelectView}}}"
SelectedItem="{Binding SelectedCulture, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:LanguageSelectView}}}"
>
<ComboBox.ItemTemplate>
...
</ComboBox.ItemTemplate>
</ComboBox>
</UserControl>
后面的代码:
public static readonly DependencyProperty SelectedCultureProperty = DependencyProperty.Register(nameof(SelectedCulture), typeof(CultureInfo),
typeof(LanguageSelectView), new FrameworkPropertyMetadata(null) {BindsTwoWayByDefault = true, DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged});
public CultureInfo SelectedCulture
{
get { return (CultureInfo) GetValue(SelectedCultureProperty); }
set { SetValue(SelectedCultureProperty, value); }
}
[Import]
public LanguageSelectViewModel ViewModel { get; set; }
用户视图:
...
<DataGrid ItemsSource="{Binding Users}" AutoGenerateColumns="False" Name="DataGrid" SelectionChanged="DataGrid_OnSelectionChanged">
<DataGrid.Columns>
<DataGridTemplateColumn Header="{wpf:Localize PrefferedLanguage}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<localization:LanguageSelectView SelectedCulture="{Binding SelectedCulture}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
...
用户视图模型:
public class UserViewModel
{
...
public CultureInfo SelectedCulture
{
get { <Getter> }
set { <Setter> <-- It's not getting called! }
}
}
当我使用 UpdateSourceTrigger=PropertyChanged 更新绑定时,一切都按预期工作。我检查了语言控件是否正在使用 PropertyChangedCallback 更新 DependencyProperty,并且它工作没有问题,所以看起来像是在用户视图一侧的绑定问题。
谢谢!