Как я могу установить привязку данных к произвольному свойству в XAML? - PullRequest
1 голос
/ 15 ноября 2011

У меня следующая проблема: я разрабатываю UserControl, датчик градуированного цвета. Я решил использовать образец дизайна MVVM, который оказывается хорошим выбором. Однако у меня есть следующая проблема. В файле View XAML я пытаюсь преобразовать значение в цвет, используя конвертер custtom, для которого требуется 2 параметра. Для этого я использую MultiBinding:

<ItemsControl ItemsSource="{Binding Path=ViewData}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Height="2">
                <Rectangle.Fill>
                    <MultiBinding Converter="{StaticResource colorConverter}">
                        <Binding Path="Value"/>
                        <Binding Source="{StaticResource Palette_ICOS}"/>
                    </MultiBinding>
                </Rectangle.Fill>
            </Rectangle> 
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Дело в том, что я не хочу использовать

{StaticResource Palette_ISO1}

в качестве второго параметра, но это свойство, которое является прямым свойством DataContext и не является свойством члена коллекции ViewData. Я пробовал несколько способов реализовать этот сценарий, но без значительного успеха.

Как и в прошлый раз, я попробовал следующее:

<Binding Path="CurrentPallete"/>

и CurrentPallete выглядит так:

public Palette CurrentPalette
{
    get { return _currentPalette; }
    set
    {
        _currentPalette = value;
    }
 }

т.е. Свойство в классе, экземпляр которого установлен как DataContext элемента управления main , в котором размещен ItemControl . Я получаю

[0x00000001] = {DependencyProperty.UnsetValue}

значение в отладчике, когда вызывается соответствующий конвертер, что, вероятно, означает, что свойство не может быть найдено. Кто-нибудь может указать, как добиться желаемого эффекта? Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011
<Binding Path="DataContext.Palette_ICOS"
         RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}" />
0 голосов
/ 15 ноября 2011

Вы пробовали

<Binding Path="Palette_ICOS"/>

Если Palette_ICOS является свойством в привязке DataContext текущего элемента, оно должно работать.

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