从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