Silverlight - привязать столбец DataGrid к корневому свойству модели представления? - PullRequest
3 голосов
/ 11 ноября 2010

У меня есть следующий XAML:

<UserControl.Resources>
    <local:MainPageViewModel x:Key="ViewModel" />
</UserControl.Resources>

<Grid x:Name="LayoutRoot" 
      DataContext="{Binding Source={StaticResource ViewModel}}">
    <sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Header="ID" Binding="{Binding ID}" />
            <sdk:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
            <sdk:DataGridCheckBoxColumn
                Header="Checkbox Column"
                Binding="{Binding Source={StaticResource ViewModel},
                                  Path=SomeBooleanProperty}"/>

        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
</Grid>

Итак, я хочу, чтобы один из столбцов (столбец флажка) был привязан к какому-либо свойству (SomeBooleanProperty), которое находится непосредственно в ViewModel, а недля свойства одного из элементов в коллекции Items.(Да, это немного надумано, но это решает мою проблему.) Проблема в том, что, основываясь на моем тестировании, если вы выполняете привязку через StaticResource, кажется, что значение не обновляется на основе запуска события INotifyPropertyChanged.Начальное значение правильное, но оно никогда не меняется.Я не могу найти другой способ, чтобы "выйти" из привязки Предметов и обратно в ViewModel из привязки столбца.

Я думаю, что в WPF вы могли бы сделать это с помощью RelativeBinding с использованием FindAncestor,Но эта функциональность не существует в Silverlight.Есть ли другие способы сделать это?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2010

Привязка элемента не ограничивается «элементами управления».Вы можете попробовать привязку элемента к LayoutRoot , поскольку это разрешается во время выполнения на основе просто имен в текущей области.

Затем он должен получить DataContext любого элемента, на который вы указываете.

Например,

<sdk:DataGridCheckBoxColumn
                Header="Checkbox Column"
                Binding="{Binding ElementName=LayoutRoot,
                                  Path=SomeBooleanProperty}"/>

Если привязка по-прежнему не срабатывает, это будетпризнак / недостаток CheckBoxColumn (например, он выбирает значения из контекста данных строки)

0 голосов
/ 12 ноября 2010

Я действительно не знаю, что случилось. На основании комментария @ TerenceJackson, в котором говорилось, что это сработало для него, я полностью перестроил страницу и код виртуальной машины, и все заработало. Я очень критически посмотрел на обе части кода, чтобы выяснить, что же отличалось, но я не смог. Поэтому, хотя меня это и беспокоит, мне придется двигаться дальше. Я думаю, что оставлю этот вопрос на всякий случай, если кто-то столкнется с той же проблемой и выяснит причину.

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