簡體   English   中英

如何在 Visual Studio 2010 中使用對象數據源進行 WPF 數據綁定?

[英]How is WPF Data Binding using Object Data Source in Visual Studio 2010 done?

這可能主要是關於如何以 Microsofties 沒有特別打算的方式使用 VS 2010 IDE 工具的問題。 但由於這是我立即嘗試但沒有成功的事情。

我已經定義了一個 .NET 4.0 WPF 應用程序項目,其中包含一個如下所示的簡單類:

Public Class Class1
    Public Property One As String = "OneString"
    Public Property Two As String = "TwoString"
End Class

然后我在 VS2010 中將其定義為“對象數據源”,使用 IDE 的“添加新數據源...”功能。 這將在 IDE 中的 GUI 元素中公開類成員,如下圖所示: 數據源工具圖片
(來源: finitesolutions.com

將“Class1”從該工具拖到默認“WPF 應用程序”中的“Window1.xaml”表面會導致設計視圖如下所示:

從數據源工具中拖出
(來源: finitesolutions.com

並生成這樣的 XAML:

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="133" Width="170" xmlns:my="clr-namespace:WpfApplication1" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
>
<Window.Resources>
    <CollectionViewSource x:Key="Class1ViewSource" d:DesignSource="{d:DesignInstance my:Class1, CreateList=True}" />
</Window.Resources>
<Grid DataContext="{StaticResource Class1ViewSource}" HorizontalAlignment="Left" Name="Grid1" VerticalAlignment="Top">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Label Content="One:" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
    <TextBlock Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3" Name="OneTextBlock" Text="{Binding Path=One}" VerticalAlignment="Center" />
    <Label Content="Two:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
    <TextBlock Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="3" Name="TwoTextBlock" Text="{Binding Path=Two}" VerticalAlignment="Center" />
</Grid>

請注意TextBlock元素中的數據綁定Text="{Binding Path=One}"Text="{Binding Path=Two}"

Window_Loaded代碼隱藏在Window_Loaded有這個:

   Class Window1
        Private m_c1 As New Class1
        Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Dim Class1ViewSource As System.Windows.Data.CollectionViewSource = CType(Me.FindResource("Class1ViewSource"), System.Windows.Data.CollectionViewSource)
            'Load data by setting the CollectionViewSource.Source property:
            'Class1ViewSource.Source = [generic data source]
            Me.DataContext = m_c1
        End Sub
    End Class

運行應用程序會產生以下輸出:

運行應用程序
(來源: finitesolutions.com

預期的結果是“OneString”將出現在運行窗口中的“One”旁邊和“TwoString”旁邊。

問題是:為什么這不起作用? 什么會起作用? 如果我將綁定放在 DataTemplate 中,它就可以工作。 Blend 及其示例數據內容暗示這應該有效,但事實並非如此。 我知道我在這里遺漏了一些非常基本的東西; 它是什么?

我相對較快地找到了這個答案,所以我將回答我自己的問題。

生成的 XAML 代碼包含以下內容:

<Grid DataContext="{StaticResource Class1ViewSource}"

刪除DataContext="{StaticResource Class1ViewSource}"刪除了掩蓋 Window.DataContext 的內容,並且綁定起作用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM