1

私には ItemsControl があり、人のリストがあります。人のリストの各要素には、人の名前だけが含まれます。C# コードでは、testItemsControl.ItemsSource を、各人の名前を含む監視可能なコレクションに設定します。会社はコード ビハインドで定義されます。次の xaml コードは Name を正しく検出しますが、もちろん Company は検出しません。

    <ItemsControl x:Name="testItemsControl">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{Binding Name}"/>
                    <TextBlock Text="{Binding Company}"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

会社を正しく拘束するにはどうすればよいですか?

4

3 に答える 3

1

RelativeSource バインディングを使用する必要があります。

コードビハインド。

public partial class Window3 : Window
{
    public Window3()
    {
        InitializeComponent();
        this.DataContext = this;
        BuildData();
        Company = "XYZ";
        testItemsControl.ItemsSource = Persons;
    }

    private void BuildData()
    {
        Persons.Add(new Person() { Name = "R1" });
        Persons.Add(new Person() { Name = "R2" });
        Persons.Add(new Person() { Name = "R3" });
    }

    public string Company { get; set; }

    private ObservableCollection<Person> _persons = new ObservableCollection<Person>();

    public ObservableCollection<Person> Persons
    {
        get { return _persons; }
        set { _persons = value; }
    }
}

XAML コード

<ItemsControl x:Name="testItemsControl">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" Margin="5"/>
                    <TextBlock Text="{Binding Company, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Margin="5" />

                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

ありがとう、ラジニカント

于 2012-11-12T11:11:16.080 に答える
0

NameとCompanyの両方を保持するクラスを作成し、新しく作成したタイプのオブジェクトを使用してリストを作成し、それをitemssourceとして設定します。

internal class Worker 
{
    public string Name { get; set; }
    public string Company { get; set; }
}
于 2012-11-12T08:58:37.627 に答える
0

定義した各 DataTemplate は、ItemsControl.ItemsSource のオブジェクトを DataContext として使用します。あなたの場合、それは人のクラスです。

そのため、DataTemplate 内で Contents Name と Company プロパティを探しています。この場合、Person.Name、Person.Company.

会社を見つけたい場合は、会社のプロパティを個人クラスに追加するか、バインディングのパスを設定して会社のプロパティを見つけることができます。後者は、itemsSource に対して会社のプロパティを定義した場所によって異なります。

于 2012-11-12T08:32:56.500 に答える