Как связать унаследованное значение присоединенного свойства с моей виртуальной машиной? - PullRequest
3 голосов
/ 14 июля 2010

Я определил пользовательское присоединенное свойство следующим образом:

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 со свойством VM FilterCol. Я не уверен, как этого добиться. Приведенный выше код / ​​XAML устанавливает значение по умолчанию для присоединенного свойства (strng.Empty) только для свойства VM, что связано с тем, что он создает новый экземпляр присоединенного свойства в дочернем элементе управления. Не уверен, какой синтаксис XAML использовать, чтобы привязать его к значению, заданному в элементе управления Grid (parent).

Ответы [ 2 ]

0 голосов
/ 22 июля 2010

Я постараюсь опубликовать часть своего кода через некоторое время (сейчас у меня нет времени), но, посмотрев снова на ваш код, я думаю, что ваша проблема здесь:

В этой строке вы устанавливаете DataContext на "{Binding Tables [Table1]}", и я думаю, что это место, где ваша Binding пытается найти FilterCol, а его там нет. Попробуйте установить {Binding FilterCol, RelativeSource = {RelativeSource AncestorType = {x: Тип Grid}}} надеюсь, это поможет

0 голосов
/ 22 июля 2010

У меня была точно такая же проблема.И моя проблема заключалась в том, что DataContext был настроен не на виртуальную машину, а на другой объект, поэтому мне просто нужно было обойти это, и теперь все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...