Привязка значения UIElement в GridViewDataColumn.Header не работает - PullRequest
0 голосов
/ 18 июля 2011

Я пытаюсь показать круг в виде сетки телрика, и я хотел динамически привязать цвет к этому кругу. Так как я работаю с шаблоном MVVM, я должен привязать свою модель представления к текстовому тексту моей страницы. Но привязка Кажется, это не работает для меня. Когда я исследовал проблему, потому что заголовки столбцов не имеют никакого datacontext, поэтому я попытался связать значение, используя «ElementName» и попытался использовать его datacontext, но даже это также не работает.

Может ли кто-нибудь помочь мне решить эту проблему.

Это мой код xaml

<UserControl x:Class="TelrikStyling.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:telerikGrid="http://schemas.telerik.com/2008/xaml/presentation"
             xmlns:myColour="clr-namespace:TelrikStyling"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" x:Name="myMainPage">
        <Grid x:Name="LayoutRoot" Background="White" Loaded="LayoutRoot_Loaded">
            <telerikGrid:RadGridView x:Name="radGridView"
                        AutoGenerateColumns="False">
            <telerikGrid:RadGridView.Columns>
                <telerikGrid:GridViewDataColumn>
                    <telerikGrid:GridViewDataColumn.Header>
                            <StackPanel Orientation="Horizontal">
                                <Ellipse x:Name="headerEllipse" Width="20" Height="20" Fill="{Binding ElementName=myMainPage, Path=DataContext.Colour}"></Ellipse>
                            </StackPanel>
                    </telerikGrid:GridViewDataColumn.Header>
                </telerikGrid:GridViewDataColumn>
            </telerikGrid:RadGridView.Columns>
        </telerikGrid:RadGridView>
    </Grid>
</UserControl>

Это мой вид модели

public MainPage()
{
    InitializeComponent();

    this.DataContext = new MainPageViewModel { Colour = new SolidColorBrush(Colors.Red) };
}

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Я нашел решение для своей проблемы, добавив новый эллипс в макет как дочерний элемент сетки макета, а затем связал свойство Color модели представления со свойством Fill нового эллипса. Позднее я связал свойство Fillэллипса в RadGrid к вновь добавленному эллипсу.

Это новый xaml

<UserControl x:Class="TelrikStyling.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:telerikGrid="http://schemas.telerik.com/2008/xaml/presentation"
             xmlns:myColour="clr-namespace:TelrikStyling"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" x:Name="myMainPage">
        <Grid x:Name="LayoutRoot" Background="White" Loaded="LayoutRoot_Loaded">
            <telerikGrid:RadGridView x:Name="radGridView"
                        AutoGenerateColumns="False">
            <telerikGrid:RadGridView.Columns>
                <telerikGrid:GridViewDataColumn>
                    <telerikGrid:GridViewDataColumn.Header>
                            <StackPanel Orientation="Horizontal">
                                <Ellipse x:Name="headerEllipse" Width="20" Height="20" Fill="{Binding ElementName=invisibleEllipse, Path=Fill}"></Ellipse>
                            </StackPanel>
                    </telerikGrid:GridViewDataColumn.Header>
                </telerikGrid:GridViewDataColumn>
            </telerikGrid:RadGridView.Columns>
        </telerikGrid:RadGridView>
   <Ellipse x:Name="invisibleEllipse" Width="20" Height="20" Fill="{Binding Colour}"></Ellipse>
    </Grid>
</UserControl>

Может кто-нибудь сказать мне, почему не работает привязка, когда я даю myMainPage как имя элемента, и оно начало работать, когда я дал новый elisple?

Пока кто-нибудь не ответит на этот вопрос, я отмечаю это как ответ.

0 голосов
/ 18 июля 2011

Попробуйте использовать RelativeSource вместо ElementName в привязке

В прошлом у меня были похожие проблемы, когда я не мог разрешить привязку с помощью ElementName, но мог с RelativeSource. Я думаю, что это может быть связано со сроками разрешения привязки.

<Ellipse Fill="{Binding RelativeSource={RelativeSource 
             AncestorType={x:Type myColour:MainPage}}, 
             Path=DataContext.Colour}" />
...