C# 使用相对源和依赖属性绑定-MVVM

C# 使用相对源和依赖属性绑定-MVVM,c#,wpf,data-binding,mvvm,viewmodel,C#,Wpf,Data Binding,Mvvm,Viewmodel,有人能给我解释一下MVVM绑定中的相对资源-祖先特性吗。基本上,依赖属性通过视图模型绑定到具有上述概念的按钮。这将是伟大的一些解释与样品。或者一些链接也可以 编辑1: <Button Name="button1" Content ="Edit" Margin="0, 0, 5, 0" Style="{StaticResource button}" Grid.Column="0" Visibility="{Binding cMode, Converter={StaticR

有人能给我解释一下MVVM绑定中的相对资源-祖先特性吗。基本上,依赖属性通过视图模型绑定到具有上述概念的按钮。这将是伟大的一些解释与样品。或者一些链接也可以

编辑1:

<Button Name="button1" Content ="Edit" Margin="0, 0, 5, 0" Style="{StaticResource button}"  
        Grid.Column="0" Visibility="{Binding cMode, Converter={StaticResource VisibilityConverter}, ConverterParameter={StaticResource invert}}"  
        Click="EditButton_Click"  
        IsEnabled="{Binding Path= Data.User.CanEdit, RelativeSource={RelativeSource FindAncestor, AncestorType=views:SCView, AncestorLevel=1}}"/>


CanEdit也是一个dependencyproperty

它在元素祖先中搜索,直到找到AncestorType的元素。此元素将作为源

在以下示例中,按钮的宽度与网格的宽度相同:

<Grid Width="100"> <!--Level=2-->
    <Border> <!--Level=1-->
        <Button Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Grid}}, Path=ActualWidth}"/>
    </Border>
</Grid>


此外,您还可以通过设置AncestorLevel来设置搜索的级别。

您读过这个吗?我读过,但不太清楚……您的
数据上下文是什么?据我所见,我认为您不需要将
相对资源
binding.datacontext设置为构造函数中的数据。请检查我的edit1。在这方面,祖先是否是viewmodel,即SCView?请尝试以下操作:
Path=DataContext.Data.User.CanEdit
hmmm…我可以看到一些区别。这一变化意味着什么?我的意思是,我不知道这个更改会发生什么,我假设属性
Data
是ViewModel的一部分,它是SCView的DataContext。您可以通过DataContext.Properties访问它。如果数据是ViewModel,则将行更改为
DataContext.User.CanEdit
。数据是ViewModel,在构造函数中设置为SCView的DataContext。