从FindAncestor到自定义控件的依赖项属性的wpf绑定

我有一个DependencyProperty MyString的自定义WPF控件

我在我的View中使用ItemsControl中的控件,并想从ViewModel中获取一个值。

当控件的DataContext成为ItemsControl的ItemsSource中的每个Item时,我认为我只能使用FindAncestor,但它似乎可以正常工作......任何人都可以看到我要出错的地方吗?

继承人视图中的XAML ...

<Grid>
    <ItemsControl ItemsSource="{Binding MyItems}" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Name="myStack">
                    <ImportExceptions:ControlStrip MyString="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.MyStringOnViewModel}" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>

    </ItemsControl>
</Grid>

并继承我的自定义控件背后的代码,我已经设置了我的依赖项属性...

public partial class ControlStrip
{

    public ControlStrip()
    {
        InitializeComponent();
    }

    public string MyString
    {
        get
        {
            return GetValue(MyStringProperty).ToString();
        }
        set
        {
            SetValue(MyStringProperty, value);
        }
    }

    public static readonly DependencyProperty MyStringProperty =
        DependencyProperty.RegisterAttached("MyString", typeof (string), typeof (ControlStrip));


}

你的代码看起来很好。 可能你在DataContext参考中犯了一个错误。 在所有可能性中,ItemsControl的DataContext已经是MyStringOnViewModel。 因此,在Path属性中的DataContext之后省略.MystringOnViewModel。 如果不是,你可以提供更多的代码,或者发布一个简单的代码来模拟DataCon,文本是如何设置的?


该控件的DataContext不会改变 - DataContext的ImportExceptions:ControlStrip将(除非明确指定)下一个DataContext可用,因为它向上'视觉树'...

我从你的代码中推断出你已​​经将View的DataContext设置为属性'MyItems'和'MyStringOnViewModel'的ViewModel - 你应该能够直接将MyString属性直接绑定到ViewModel,就像

<ImportExceptions:ControlStrip MyString="{Binding Path=MyStringOnViewModel}" />
链接地址: http://www.djcxy.com/p/44603.html

上一篇: wpf binding from a FindAncestor to Dependency Property of custom control

下一篇: Silverlight UserControl Custom Property Binding