数据未显示在UserControl中

问题描述 投票:0回答:1

当我运行代码时,UI中未显示任何数据。数据存在于Person对象中,但未在UI中显示。

列表正在填充。人员对象中有10个项目,我可以在UI中看到正在创建的10个项目,但未显示名称和年龄。

enter image description here

在Visual Studio预览中,我可以看到数据

enter image description here

UserControl XAML

<UserControl x:Class="BlankApp1.Views.PersonUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:prism="http://prismlibrary.com/"             
         prism:ViewModelLocator.AutoWireViewModel="True">
  <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="{Binding Name}" Margin="10 3"/>
    <TextBlock Text="{Binding Age}" Margin="10 3" Grid.Column="1"/>
  </Grid>
</UserControl>

型号

public class PersonModel : ObservableBase
{
    private string name;
    public string Name
    {
        get { return name; }
        set { Set(ref name, value); }
    }

    private int age;
    public int Age
    {
        get { return age; }
        set { Set(ref age, value); }
    }
}

MainViewModel

public class MainWindowViewModel : BindableBase
{
    private string _title = "Prism Application";
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }

    public MainWindowViewModel()
    {
        Mock();
    }

    public ObservableCollection<PersonModel> Persons { get; set; }
    = new ObservableCollection<PersonModel>();

    private Random rand = new Random();

    private void Mock()
    {
        for (int i = 0; i < 10; i++)
        {
            Persons.Add(new PersonModel
            {
                Name = string.Format("Person {0}", i),
                Age = rand.Next(20, 50)
            });
        }
    }
}

MainView XAML

<Window x:Class="BlankApp1.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:prism="http://prismlibrary.com/"
    xmlns:local="clr-namespace:BlankApp1.ViewModels"
    xmlns:model="clr-namespace:BlankApp1"
    xmlns:view="clr-namespace:BlankApp1.Views"
    prism:ViewModelLocator.AutoWireViewModel="True"
    Title="{Binding Title}" Height="350" Width="525">

<Window.DataContext>
    <local:MainWindowViewModel/>
</Window.DataContext>
  <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Grid.Resources>
        <DataTemplate DataType="{x:Type model:PersonModel}">
            <view:PersonUserControl/>
        </DataTemplate>
    </Grid.Resources>

    <TextBlock Text="ItemsControl Example" FontWeight="Bold" Margin="4 10"/>
    <Border BorderThickness="1" BorderBrush="Silver" Margin="4" Grid.Row="1">
        <ScrollViewer HorizontalScrollBarVisibility="Hidden"

                      VerticalScrollBarVisibility="Auto">
            <ItemsControl ItemsSource="{Binding Persons}"/>
        </ScrollViewer>
    </Border>

    <TextBlock Text="ListBox Example" FontWeight="Bold" Margin="4 10" Grid.Column="1"/>
    <ListBox ItemsSource="{Binding Persons}" Margin="4" Grid.Row="1" Grid.Column="1">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
  </Grid>
</Window>
wpf data-binding user-controls
1个回答
1
投票

[prism:ViewModelLocator.AutoWireViewModel="True"DataContextPersonUserControl设置为视图模型,这意味着对在PersonModel中创建的MainWindowViewModel对象的属性的绑定失败。

因此您应该从XAML标记中删除prism:ViewModelLocator.AutoWireViewModel="True"。>>

© www.soinside.com 2019 - 2024. All rights reserved.