WPF-绑定到用户控件';s依赖项属性不为';如果没有UpdateSourceRigger,则无法正常工作
我有一个可重用的UserControl,用于使用combobox和DependencyProperty SelectedCulture选择语言。然后,我有另一个控件,其中的用户列表使用UsersViewModel显示在数据网格中,UsersViewModel包含UserViewModel的集合。其中一列是包含语言选择控件的DataGridTemplateColumn。我将属性SelectedCulture绑定到UserViewModel的属性,但是绑定不会更新UserViewModel的值,除非UpdateSourceTrigger设置为PropertyChanged 为什么不呢?不应该是PropertyChanged默认值吗 语言选择视图:WPF-绑定到用户控件';s依赖项属性不为';如果没有UpdateSourceRigger,则无法正常工作,wpf,binding,dependency-properties,propertychanged,updatesourcetrigger,Wpf,Binding,Dependency Properties,Propertychanged,Updatesourcetrigger,我有一个可重用的UserControl,用于使用combobox和DependencyProperty SelectedCulture选择语言。然后,我有另一个控件,其中的用户列表使用UsersViewModel显示在数据网格中,UsersViewModel包含UserViewModel的集合。其中一列是包含语言选择控件的DataGridTemplateColumn。我将属性SelectedCulture绑定到UserViewModel的属性,但是绑定不会更新UserViewModel的值,除非
<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>
用户视图:
...
<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>
...
。。。
...
UserViewModel:
public class UserViewModel
{
...
public CultureInfo SelectedCulture
{
get { <Getter> }
set { <Setter> <-- It's not getting called! }
}
}
public类UserViewModel
{
...
公共文化信息选择文化
{
获取{}
设置{默认情况下,它只会在控件失去焦点时更新。通过将UpdateSourceTrigger
更改为PropertyChanged
,每次更改控件时都会强制它更新。即使控件失去焦点,值也不会更新(我单击组合框,切换值,然后单击其他控件)。如果您看到依赖项属性注册,我会将DefaultUpdateSourceTracger设置为PropertyChanged,这将被忽略。您是否尝试过改用INotifyPropertyChanged
?这就是我在这种情况下的选择。我尝试将INotifyPropertyChanged添加到语言SelectView中,并在更改dependency属性,但它仍然不起作用:/n不,只需跳过DP并仅实现INPC,并在setter中引发事件。默认情况下,它仅在控件失去焦点时更新。通过将UpdateSourceTrigger
更改为PropertyChanged
,每次更改控件时都会强制更新它。即使控件失去焦点,值未更新(我单击组合框,切换值并单击其他控件)。如果您看到依赖项属性注册,我会将DefaultUpdateSourceTracger设置为PropertyChanged,这将被忽略。您是否尝试过改用INotifyPropertyChanged
?这就是我在这种情况下的选择。我尝试将INotifyPropertyChanged添加到语言SelectView中,并在更改dependency属性,但它仍然不起作用:/n不,只需跳过DP并仅实现INPC,然后在setter中引发事件。
public class UserViewModel
{
...
public CultureInfo SelectedCulture
{
get { <Getter> }
set { <Setter> <-- It's not getting called! }
}
}