Как привязать логическое значение к флажкам GridViewColumn (есть код, но он не работает)? - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь привязать значение bool к флажкам в GridViewColumn, но это не работает. Я даже попытался просто вернуть false, но флажки все еще выглядят активными. Это работает, только если я ввожу «False» в xaml.

Свойство для привязки:

public bool HasPermissions
{
    get { return this.UserPrivileges == UserPrivileges.FullAccess; }
}

Текущее значение this.UserPrivileges не равно UserPrivileges.FullAccess.

Код Xaml:

<Window x:Class="EffectsWindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Effects Manager"
        Width="800"
        Height="500"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
    <DockPanel VerticalAlignment="Stretch">
        <DockPanel.Resources>

        <ListView x:Name="EffectsListView"
                  ItemsSource="{Binding AllEffects}">

            <ListView.View>
                <GridView>

                    <GridViewColumn Width="50" Header="Override">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Margin="0"
                                          HorizontalAlignment="Center"
                                          IsEnabled="{Binding HasPermission}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                </GridView>
            </ListView.View>
        </ListView>

    </DockPanel>
</Window>

РЕДАКТИРОВАТЬ: Текущий код недвижимости:

public bool HasPermissions
{
    get { return this.UserPermissions == UserPermissions.FullAccess; }
    set { this.RaisePropertyChanged ( "HasPermissions" ); }
}

1 Ответ

1 голос
/ 17 марта 2011

Подумайте о проблеме в вашем обновленном свойстве: у этого свойства нет вспомогательного поля, его получатель возвращает результат сравнения другого свойства с UserPermissions.FullAccess. Поэтому он никогда не может быть установлен .

На что следует обратить внимание, когда пользовательский интерфейс должен быть уведомлен об изменении значения, возвращаемого HasPermissions? Хорошо, когда может изменить это значение? Когда значение this.UserPermissions меняется, верно?

Предполагая, что this.UserPermissions само является свойством с установщиком, его установщик является местом для вызова RaisePropertyChanged("HasPermissions"). Это скажет пользовательскому интерфейсу, что, даже если он не связывается с UserPermissions напрямую, свойство, с которым он связывает , должно быть переоценено.

Обновление: Что касается вашего комментария, IsChecked действительно является свойством CheckBox, к которому следует привязать HasPermissions, если вы хотите, чтобы в состоянии флажка было указано, что у пользователя есть разрешение.

Обновление 2-го: Звучит так, как будто вы хотите получить доступ к свойству DataContext окна из визуального дочернего элемента (ListBox). Для этого вы можете использовать привязку RelativeSource, например:

<CheckBox Margin="0"
          HorizontalAlignment="Center"
          IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.HasPermission}"/>

Эта несколько неуклюжая нотация найдет ближайший родительский элемент к CheckBox в визуальном дереве типа Window и свяжется со своим свойством DataContext, чтобы найти HasPermission.

...