使用MVVM的WPF:使用RelativeSource的DataBinding

时间:2012-05-30 10:18:17

标签: c# wpf c#-4.0 mvvm mvvm-light

我有一个控件,在该控件中我有一个带有数据tempalte的资源:

  <DataTemplate DataType="{x:Type local:FlowModel}">
    <Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vm:MainViewModel}}, Path=MainViewModel.ImagePath}"/>
  </DataTemplate>

 xmlns:vm="clr-namespace:CortexMonitoringTool.ViewModel"

我已将vm设置为我的ViewModel文件夹,我正在实现mvvm。我不能让我的约束力工作,我不确定为什么不。

有人可以告诉我,如果我的相对绑定是正确的,是否可以在我的MainViewModel类中看到我的属性'ImagePath'?

public String ImagePath
    {
        get
        {
            return _imagePath;
        }
        set
        {
            if (_imagePath == value)
            {
                return;
            }
            _imagePath = value;
            RaisePropertyChanged("ImagePath");
        }
    }

谢谢。

2 个答案:

答案 0 :(得分:10)

嗨,我设法让它发挥作用。

  <DataTemplate DataType="{x:Type local:FlowModel}">
    <Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.ImagePath}"/>
  </DataTemplate>

我将AncestorType更改为'Window',它已准备好绑定到我的MainViewModel,然后使用'DataContext'。在我的路径中能够看到我的财产。

希望这有助于其他人!!

答案 1 :(得分:4)

您查看模型不是Visual树的一部分。所以找到祖先类型不会在那里工作。如果您找到具有datacontext的根父级,则可以使用其属性与like。

绑定
<Image Source={...... Path=DataContext.MyProperty}"/>