В привязке ItemControl к свойству свойства работают, но привязка к DataContext - PullRequest
1 голос
/ 12 января 2012

когда я запускаю этот код, объект Item в моем CustomControl становится System.Windows.Data.Binding, содержащим только нулевые значения, но DataContext становится объектом MyClass (который заполнен Items)

<UserControl x:Name="thisControl">

<Grid x:Name="LayoutRoot">
    <ItemsControl ItemsSource="{Binding ElementName=thisControl,Path=Items}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <local:UniformGrid Columns="1"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <local:CustomControl Item="{Binding}" DataContext="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>
</UserControl>

Мой класс CustomControl

public partial class CustomControl : UserControl
{
    public CustomControl()
    {
        InitializeComponent();
    }

    public object Item { get; set; }
}

Есть что-то, чего я не знаю о ItemsControl? это написано в Silverlight 4.0

Заранее спасибо!

1 Ответ

0 голосов
/ 12 января 2012

Нет необходимости пытаться назначить пользовательский элемент управления DataContext. ItemsControl позаботится об этом за вас.

Также ваш код CustomControl должен указывать свойство Item как DependencyProperty для привязки к работе. Привязка не работает с обычными обычными свойствами.

Пример:

    public object Item
    {
        get { return GetValue(ItemProperty); }
        set { SetValue(ItemProperty, value); }
    }

    public static readonly DependencyProperty ItemProperty =
        DependencyProperty.Register(
            "Item",
            typeof(object),
            typeof(CustomControl),
            new PropertyMetadata(null))

(я предполагаю, что RSListBoxStopItem - опечатка, и вы хотели обобщить до CustomControl)

...