3

ListBox含む ViewModel に をバインドしましたListBox.SelectedItem。選択されているかどうかに応じて視覚的な状態を変更したいのですが、以下は最初は状態を更新しないため、間違った状態のままです。

<DataStateBehavior Binding="{Binding SelectedCamera}" Value="{x:Null}" TrueState="CameraSettingsUnselected" FalseState="CameraSettingsSelected"/>

それはなぜですか、それを修正する方法は?

4

2 に答える 2

3

ここでの問題は、バインディングが最初に評価さnullれ、評価と状態の変更に必要な変更通知が発行されないことです。

次のサブクラスで修正しました。

public class FixedDataStateBehavior: DataStateBehavior
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.Loaded += (sender, routedEventArgs) =>
            {
                var bindingExpression = BindingOperations.GetBindingExpression(this, BindingProperty);
                SetCurrentValue(BindingProperty,new object());
                bindingExpression.UpdateTarget();
            };
    }
}

そしてそれを次のように使用しました:

<FixedDataStateBehavior Binding="{Binding SelectedCamera}" Value="{x:Null}" TrueState="CameraSettingsUnselected" FalseState="CameraSettingsSelected"/>
于 2013-07-22T11:20:06.980 に答える