1

私はいくつかの WPF コントロールでメンテナンス作業を行う必要がありますが、これは私がよく知らないものであり、WPF のいくつかの基礎に苦労しています。

私は次のコードを持っていますが、これは「コードビハインド」と呼ばれていると理解しています:

Class MainWindow
    Private _myStrings As New List(Of String)({"one", "two", "three", "four", "five"})
    Public Property myStrings As List(Of String)
        Get
            Return _myStrings
        End Get
        Set(value As List(Of String))
            _myStrings = value
        End Set
    End Property
End Class

それから、本当に醜い ComboBox を定義するこの WPF のものがあります。

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ComboBox Margin="0,10,0,0"
                  x:Name="cboItem" 
                  TabIndex="1"/>
    </Grid>
</Window>

質問:私が知りたいのは、XAML で参照を正しく作成myStringsして cboItem ComboBox にリストを表示する方法だけですか? それがわかれば、データバインディングの概念を詳細に理解できるようになりますが、今は、「データを探す場所を XAML に指示するにはどうすればよいですか?」など、非常に基本的なことを説明してくれる人が必要です。

4

1 に答える 1

1

ComboBoxItemsSourceには、文字列の静的リストに設定できる、またはより一般的にはオブジェクトのリストにバインドできるというプロパティがあります。

WPF オブジェクトは、DataContext. これはすべての WPF フレームワーク要素のプロパティであり、「カスケード」するため、 を設定するDataContextと、Windowそのウィンドウのすべてのコントロールも同じ を継承することになりDataContextます。ただし、同じコンテキストを使用する必要はありませんプロパティを設定するだけで、すべてのコントロールに独自のコンテキストを設定できDataContextます。

ウィンドウ自体 (コード ビハインド) で文字列のリストを定義しました。これは本当に普通ではありません。WPF で使用されるより一般的な方法は、ビューに必要なすべてのデータを含むViewModelクラスを定義し、それをDataContext. これがMVVMパターンのすべてです。

ただし、あなたの例ではDataContext、ウィンドウをウィンドウ自体に設定することを妨げるものは何もありません:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    DataContext="{Binding RelativeSource={RelativeSource Self}">
    <Grid>
        <ComboBox Margin="0,10,0,0"
                  x:Name="cboItem" 
                  TabIndex="1"
                  ItemsSource="{Binding myStrings}"/>
    </Grid>
</Window>

このDataContext行は、WPF にそのバインディングを調べるオブジェクトをItemsSource伝え、その行は、文字列のリストのコンテキストで使用するプロパティをコンボに伝えます。

編集:コンボに DataContext を設定するには、次のようにします。

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ComboBox Margin="0,10,0,0"
                  x:Name="cboItem" 
                  TabIndex="1"
                  DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}"
                  ItemsSource="{Binding myStrings}"/>
    </Grid>
</Window>
于 2012-09-05T09:25:49.787 に答える