Wpf Bind View для ViewModel добавить в окно wpf - PullRequest
1 голос
/ 16 июля 2010

У меня есть представление, которое содержит ItemsControl с некоторыми текстовыми блоками внутри для отображения имени и другой информации. в моем окне я добавляю представление к окну, как показано ниже, и в коде позади окна я связываю текст данных представления с моделью представления в событии Loaded MainWindow следующим образом Я запускаю его, я не получаю данные? Я проверил свою модель представления, и у меня есть данные в моей коллекции, которые я возвращаю. У кого-нибудь есть хорошие примеры того, как это сделать. У меня будет боковая панель и основной вид справа, где будут отображаться сведения о владельце.

Это мой взгляд

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Resources/ColorsAndBrushes.xaml"/>
            <ResourceDictionary Source="/Resources/DefaultStyles.xaml"/>

        </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>

</UserControl.Resources>

<DockPanel >
    <ScrollViewer VerticalScrollBarVisibility="Auto" >
        <ItemsControl Width="250"
                      VerticalAlignment="Stretch"
                      BorderThickness="0"
                      ItemsSource="{Binding Path=AllOwners}">
        <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="2">
                        <Border Margin="2 2 0 0"
                                CornerRadius="4"
                                Background="Gray"
                                Opacity=".5" />
                        <Border BorderBrush="{StaticResource redBrush}"
                                BorderThickness="2"
                                CornerRadius="4"
                                Background="White"
                                Margin="0 0 2 2"
                                Padding="3">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition />
                                    <RowDefinition />
                                    <RowDefinition />
                                </Grid.RowDefinitions>

                                <TextBlock Grid.ColumnSpan="2"
                                           FontWeight="Bold"
                                           Text="{Binding FullName}" />

                                <TextBlock Grid.Row="1"
                                               Text="   FirstName: " />
                                <TextBlock Grid.Row="1"
                                               Grid.Column="1"
                                               Text="{Binding FirstName}" />

                                <TextBlock Grid.Row="2"
                                               Text="   Email: " />
                                <TextBlock Grid.Row="2"
                                               Grid.Column="1"
                                               Text="{Binding Email}" />
                            </Grid>
                        </Border>
                        <Button Style="{StaticResource openButton}" />
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
    </ItemsControl>
    </ScrollViewer>
</DockPanel>

Это моё окно

<DockPanel>

    <v:HeaderTopBar DockPanel.Dock="Top"></v:HeaderTopBar>
        <!--<uc:SearchBar DockPanel.Dock="Top" />-->

    <StatusBar DockPanel.Dock="Bottom">
        <StatusBarItem DockPanel.Dock="Right">
            <Slider x:Name="zoomSlider"
                    Width="125"
                    Value="1"
                    Minimum=".5"
                    Maximum="2" />
        </StatusBarItem>

        <StatusBarItem DockPanel.Dock="Right">
            <TextBlock>Zoom:</TextBlock>
        </StatusBarItem>

        <StatusBarItem>
            <TextBlock Text="{Binding StatusText}" />
        </StatusBarItem>
    </StatusBar>

    <Expander DockPanel.Dock="Left"
              ExpandDirection="Right"
              IsExpanded="True"
              BorderThickness="0 1 1 1"
              BorderBrush="Gray"
              Margin="0 2 0 0"
              Padding="2">
        <Expander.Header>
            <TextBlock Text="Contacts"
                       FontSize="14"
                       FontWeight="Bold">
              <TextBlock.LayoutTransform>
                <RotateTransform Angle="90" />
              </TextBlock.LayoutTransform>
            </TextBlock>
        </Expander.Header>
        <v:OwnerSideBar/>

    </Expander>

    <TabControl x:Name="tabs"
                Grid.Column="2"
                Margin="5 0">
        <TabControl.LayoutTransform>
            <ScaleTransform ScaleX="{Binding ElementName=zoomSlider, 
                                             Path=Value}"
                            ScaleY="{Binding ElementName=zoomSlider, 
                                             Path=Value}" />
        </TabControl.LayoutTransform>
    </TabControl>

</DockPanel>

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Во-первых, убедитесь, что коллекция AllOwners, к которой вы привязываете, является коллекцией ObservableCollection.

Кроме того, проверяйте окно вывода в Visual Studio при выполнении, ищите исключения первого шанса, обнаруженные. Это будет ключом к пониманию вашей проблемы с переплетом.

Мне нравится размещать текстовый блок в представлении, связанном со свойством Items.Count в ItemsControl, чтобы вы могли видеть, является ли он обязательным и не отображает что-либо или неправильно связывается.

Дайте ItemsControl имя, затем вставьте текстовый блок в:

<TextBlock Text="{Binding ElementName=itemControl1,Path=Items.Count}/>
0 голосов
/ 16 июля 2010

Это может быть то, что вы уже просматривали, но у вас может быть опечатка, вы проверили окно вывода, чтобы увидеть, есть ли какие-либо сообщения трассировки?не вижу, где находится ваш usercontrol в xaml второй записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...