0

ブール値をのチェックボックスにバインドしようとしていますGridViewColumnが、機能しません。falseを返すことも試みましたが、チェックボックスはまだ有効になっているように見えます。xamlに「False」と入力した場合にのみ機能します。

バインドされたプロパティは次のとおりです。

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" ); }
}
4

1 に答える 1

1

更新されたプロパティの問題について考えてみてください。そのプロパティにはバッキングフィールドがなく、そのゲッターは別のプロパティをと比較した結果を返しますUserPermissions.FullAccess。したがって、設定することはできませ

焦点を当てるべきことは、によって返される値HasPermissionsが変更されたことをUIにいつ通知する必要があるかということです。さて、その値はいつ変わることができますか?価値がthis.UserPermissions変わるときでしょ?

this.UserPermissionsそれ自体がセッターを持つプロパティであると仮定すると、そのセッターはを呼び出す場所RaisePropertyChanged("HasPermissions")です。UserPermissionsこれにより、UIは、直接バインドされていない場合でも、バインドされているプロパティを再評価する必要があることがわかります。

更新:コメントに関しては、ボックスのチェック状態でユーザーに権限があることを示す場合IsCheckedは、実際にバインドする必要があるCheckBoxプロパティです。HasPermissions

2番目の更新:ビジュアルの子(リストボックス)からウィンドウのDataContextのプロパティにアクセスしたいようです。次のように、RelativeSourceバインディングを使用してこれを実現できます。

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

そのやや不格好な表記法は、ウィンドウタイプのビジュアルツリーでチェックボックスに最も近い親要素を見つけ、そのDataContextプロパティにバインドしてHasPermissionを見つけます。

于 2011-03-16T21:12:04.927 に答える