我在WinUI3
中遇到了Binding
的问题,我真的不明白问题的根源。
我在这个UserControl
中定义了一个名为MyUserControl
的UserControl
,我刚刚定义了一个名为NumberOfPlayers
的ComboBox
,如下所示:
<ComboBox
Width="{Binding ElementName=numberOfPlayersStackPanel, Path=ActualWidth}"
ItemsSource="{Binding ElementName=myUserControl, Path=NumberOfPlayersCollection}"
SelectedItem="{Binding ElementName=myUserControl, Path=NumberOfPlayers, Mode=TwoWay}"/>
字符串
下面是我的代码:
public ObservableCollection<int> NumberOfPlayersCollection { get; set; } = new ObservableCollection<int>() { 5, 6, 10 };
public static readonly DependencyProperty NumberOfPlayersProperty =
DependencyProperty.Register(
nameof(NumberOfPlayers),
typeof(int),
typeof(MyUserControl),
new PropertyMetadata(5));
public int NumberOfPlayers
{
get => (int)GetValue(NumberOfPlayersProperty);
set
{
// I cant reach to this line.
SetValue(NumberOfPlayersProperty, value);
}
}
型
我无法到达NumberOfPlayers
的二传手。这就是我在Binding
上遇到的问题。
当然,我可以用x:Bind
来做,但是我所有的UserControls
都是用Binding
来做的,除了这个(我没有用ComboBox
)。
1条答案
按热度按时间iibxawm41#
如自定义依赖项属性-实现 Package 器中所述:
在所有情况下,除了例外情况,您的 Package 器实现应该只执行GetValue和SetValue操作。否则,通过XAML设置属性与通过代码设置属性时,您将获得不同的行为。为了提高效率,XAML解析器在设置依赖属性时会绕过 Package 器;并通过SetValue与后台存储对话。
因此,当依赖项属性由Binding设置时,框架不会调用 Package 器属性的setter,而是直接调用
SetValue
方法。为了获得有关依赖项属性的值更改的通知,必须使用属性元数据注册PropertyChanged
回调。除此之外,您还为Register方法使用了错误的
name
参数。必须是nameof(NumberOfPlayers)
,而不是nameof(NumberOfPlayersProperty)
。字符串