在 WinUI3 项目中,下面的 XAML
GridView
代码工作得很好。生成 UserHomeView
中的 UI,并触发和更新依赖于 UserHomeViewModel
的所有属性和流程。但是,一旦我将 StackPanel
替换为 ItemsWrapGrid
以将项目排列在网格中,它就会停止工作,我仍然可以看到每个项目的 UserHomeView 的 UI,但 UserHomeViewModel 是 null
以及每个项目的渲染 UI项目根本无法使用。
-工作正常。
<GridView ItemsSource="{x:Bind WindowConfiguratorViewModel.KioskCollection, Mode=OneWay}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel /> <!--Working!-->
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate x:DataType="viewModelsConfigurator:ProfileKioskDesktopViewModel">
<userHomeViews:UserHomeView UserHomeViewModel="{x:Bind UserHomeViewModel}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
-不起作用。
<GridView ItemsSource="{x:Bind WindowConfiguratorViewModel.KioskCollection, Mode=OneWay}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid /><!--Not Working!-->
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate x:DataType="viewModelsConfigurator:ProfileKioskDesktopViewModel">
<userHomeViews:UserHomeView UserHomeViewModel="{x:Bind UserHomeViewModel}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
我用用户控件中的其他自定义视图进行了测试,结果是相同的。我既没有得到编译错误,也没有得到运行时错误,使用
UserHomeViewModel
时,ItemsWrapGrid
根本没有绑定。
有人知道为什么会发生这种情况吗?
确保您的用户控件中的 DependencyProperty 是
public static read-only
属性。
public int SomeValue
{
get => (int)GetValue(SomeValueProperty);
set => SetValue(SomeValueProperty, value);
}
// My first guess is that `static` is missing.
public /*static*/ readonly DependencyProperty SomeValueProperty =
DependencyProperty.Register(
nameof(SomeValue),
typeof(int),
typeof(UserControl1),
new PropertyMetadata(default));