如何将继承的附加属性值绑定到VM?

时间:2010-07-14 14:42:07

标签: wpf xaml mvvm

我已经定义了一个自定义附加属性,如下所示:

public class DataFilter
{
    public static readonly DependencyProperty FilterColumnProperty =
        DependencyProperty.RegisterAttached("FilterColumn", typeof (string), typeof (DataFilter),
                                            new FrameworkPropertyMetadata(string.Empty,
                                                                          FrameworkPropertyMetadataOptions.Inherits));

    public static void SetFilterColumn(UIElement element, string value)
    {
        element.SetValue(FilterColumnProperty, value);
    }

    public static string GetFilterColumn(UIElement element)
    {
        return (string) element.GetValue(FilterColumnProperty);
    }

}

我在我的XAML中使用它如下:

    <Grid Height="600" Name="grdData" cmds:DataFilter.FilterColumn="datasource_id">
      <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition Height="25"></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
      </Grid.RowDefinitions>
      <igDP:XamDataGrid Name="xamDataGrid1" VerticalAlignment="Top" DataSource="{Binding Tables[Table1]}" ActiveDataItem="{Binding SelectedItem, Mode=OneWayToSource}" cmds:DataFilter.FilterColumn="{Binding FilterCol, Mode=OneWayToSource">

此处的目标是能够将cmds:DataFilter.FilterColumn的继承附加属性值绑定到FilterCol的VM属性。我不确定如何实现这一目标。上面的代码/ XAML仅将附加属性(strng.Empty)的默认值设置为VM属性,这是因为它正在子控件中创建附加属性的新实例。我不确定使用什么XAML语法来将其绑定到Grid(父)控件中设置的值。

2 个答案:

答案 0 :(得分:0)

我会尝试在一段时间之后发布我的一些代码(现在没有时间)但是再次查看代码我认为你的问题在这里:

在这一行中,您将DataContext设置为“{Binding Tables [Table1]}”,我认为这是您的Binding尝试查找FilterCol的地方,而不是那里。尝试设置{Binding FilterCol,RelativeSource = {RelativeSource AncestorType = {x:Type Grid}}}  希望这有帮助

答案 1 :(得分:-1)

我有完全相同的问题。我的问题是DataContext没有设置到VM而是设置到另一个对象,所以我只需要找到解决方法,现在一切正常。