0

こんにちは、私は WPF C# を初めて使用し、winform アプリケーションを WPF に変換していますが、データ バインディングに問題があります (バインディングについてはよくわかりません)。エラーメッセージが表示されます:

バインディング式パス エラー: Classes プロパティが 'object' ' ' String' に見つかりません HashCode = "" ターゲット要素は 'TextBlock'(Name =' '); ターゲット プロパティは Text(type 'string') です

助けてください。ありがとう

私はXMLファイルを使用しており、クラス(回転、ドラッグなどの文字列値のリスト)、座標点のリスト、および出力値を含むシーケンスを保存しています。これは私のデータベースクラスです。

public class Database
    {
     public BindingList<string> Classes { get;  set; }
        public BindingList<Sequence> Samples { get;  set; }


        public Database()
        {
            Classes = new BindingList<string>();
            Samples = new BindingList<Sequence>();
        }

        public void Save(Stream stream)
        {
            var serializer = new XmlSerializer(typeof(BindingList<Sequence>));
            serializer.Serialize(stream, Samples);
        }


        public void Load(Stream stream)
        {
            var serializer = new XmlSerializer(typeof(BindingList<Sequence>));
            var samples = (BindingList<Sequence>)serializer.Deserialize(stream);

            Classes.Clear();
            foreach (string label in samples.First().Classes)
            {
                Classes.Add(label);
                Console.WriteLine(" lets check out the classes ....." + label);
            }

            Samples.Clear();
            foreach (Sequence sample in samples)
            {
                sample.Classes = Classes;
                Samples.Add(sample);
                Console.WriteLine(" lets check out the samples ....." + sample);
            }
        }
}
}

シーケンスはこのようなものです---------------

Sequence sample = new Sequence()
            {
                Classes = Classes,
                SourcePath = sequence,
                Output = classIndex
            };

これで、BindingList クラスから値を取得するコンボボックスと、シーケンスから値を取得するデータグリッドができました。XMLファイルは

<Window x:Class="WpfLearnGUI.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="417" Width="608">

    <DockPanel Width="Auto" Height="Auto" LastChildFill="True">

        <DataGrid 
            DataContext="{Binding}" ItemsSource="{Binding }"
            AutoGenerateColumns="false" Height="73" 
            Name="gridSamples"  Width="Auto"  HorizontalAlignment="Right"  DockPanel.Dock="Right"  VerticalAlignment="Top" IsEnabled="True">

        <DataGrid.Columns>
            <DataGridTextColumn 
                  Header="Gesture" />
            <DataGridTextColumn 
                    Header="Class" 
                   />
        </DataGrid.Columns>
      </DataGrid>

        <Grid Height="Auto" Name="grid1" Background="Coral" DockPanel.Dock="Bottom" Width="Auto" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="240*"/>
                <ColumnDefinition Width="264*" />

            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*"/>
                 <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <ComboBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="105,0,0,0" Name="cbClasses" VerticalAlignment="Top" Width="120"  DisplayMemberPath="Classes" SelectedValuePath="Classes" IsEditable="True" DataContext="{Binding}" ItemsSource="{Binding}" />

            <Button Content="DataBase" Grid.Column="2" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="53,1,0,0" 
                    Name="button5" VerticalAlignment="Top" Width="75" >
                <Button.ContextMenu>
                    <ContextMenu>
                        <Menu>
                            <MenuItem Header="_Open" IsCheckable="True" Click="Open_click"></MenuItem>
                        </Menu>
                    </ContextMenu>  
                </Button.ContextMenu>
                </Button>
        </Grid> 
    </DockPanel>
</Window>

このように mainWindow でこれら 2 つの値をバインドしています。

database = new Database();
cbClasses.ItemsSource = database.Classes;
gridSamples.DataContext = database.Samples;            
4

1 に答える 1

0

一歩下がって、WPF バインディングに関するいくつかのチュートリアルを読む必要があると思います。具体的には次の概念について説明します。

非常に優れた概要を提供するこのリンクをご覧になることをお勧めします(ダウンロード可能なソースコード付き)。また、別の質問に対する私の回答を確認することもできます。これは、いくつかの非常に基本的なデータ バインディング手法を示しています。

于 2013-03-14T10:49:10.407 に答える