2

私の試み(以下)は失敗します:

<Canvas x:Key="Lock" ... />
<Canvas x:Key="Unlock" ... />

<Style x:Key="LockButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
        <Da​​taTrigger Binding="{Binding Path=IsReadOnly}" Value="True">
            <Da​​taTrigger.Setters>
                <Setter Property="Content" Value="{StaticResource Lock}" />                           
            </DataTrigger.Setters>
        </データトリガー>
        <Da​​taTrigger Binding="{Binding Path=IsReadOnly}" Value="False">
            <Da​​taTrigger.Setters>
                <Setter Property="Content" Value="{StaticResource Unlock}" />
            </DataTrigger.Setters>
        </データトリガー>
    </Style.Triggers>
</スタイル>

...

<Button Content="{StaticResource Lock}" />

ViewModelのIsReadOnlyプロパティが変更されたときにボタンを変更しようとしています(PropertyNameとして「IsReadOnly」でINotifyPropertyChanged.PropertyChangedを起動します)。私は何が欠けていますか?

.NET 3.5

回答(少なくとも私にとっては、一般的なケースをサポートしていません):

ブール値プロパティ バインド用のクイック コンバーターを作成しました。

[ValueConversion(typeof(bool), typeof(object))]
public class BooleanValueConverter : IValueConverter
{
    パブリック オブジェクト FalseValue { get; 設定; }
    パブリック オブジェクト TrueValue { get; 設定; }

    #region IValueConverter メンバー

    public object Convert(オブジェクト値、タイプ targetType、
                          オブジェクト パラメータ、CultureInfo カルチャ)
    {
        戻り値 (ブール値) ? this.TrueValue : this.FalseValue;
    }

    public object ConvertBack(オブジェクト値、タイプ targetType、
                              オブジェクト パラメータ、CultureInfo カルチャ)
    {
        return object.Equals(this.TrueValue, value) ? 真/偽;
    }

    #endregion
}

...

<local:BooleanValueConverter x:Key="LockOrUnlock"
    TrueValue="{StaticResource Unlock}"
    FalseValue="{StaticResource Lock}" />

...

<Button Content="{Binding Path=IsReadOnly,
                             Converter={StaticResource LockOrUnlock}}" />
4

2 に答える 2

5

ボタンのプロパティ「コンテンツ」を設定すると、最初のものが優先されるため、トリガーで変更することはできません。
Content の設定を削除してみてください。トリガーはそれ自体で適切に機能するため、機能するはずです。

于 2010-07-18T08:16:55.123 に答える