简体   繁体   中英

Binding Itemscontrol item

My XAML is as under. I have a main ViewModel which has a list of items and I want to display a property within this list

<ItemsControl ItemsSource="{Binding MyList}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding MyName, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"></Label>

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

The problem is that MyName is always blank although my list has two items.

The main VM class has this property below and I add items in the constructor

public ObservableCollection<InnerViewModel> MyList { get; set; }

My inner VM has

public class InnerViewModel 
{
    private string _MyName;
    public string MyName 
    {
        get
        {
            return _MyName;
        }
        set
        {
            _MyName = value;
            OnPropertyChanged("MyName");
        }
    }

I do have OnPropertyChanged in place but I'm not pasting it here for simplicity. I think the problem is with the XAML but I'm not sure. How do I get the property MyName to be displayed in my list of items in the view?

Since you use MyList as the ItemsSource , the data source for the child elements will be MyList . So you do not need to use the RelativeSource.

In other words, this should work :

    <ItemsControl ItemsSource="{Binding MyList}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Label Content="{Binding MyName}"></Label>

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

Try and remove the relative source part of the binding.

<DataTemplate>
    <Label Content="{Binding MyName}"></Label>
</DataTemplate>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM