1

WPFUserControlに次のコードがあるとします。にバインドしたいAsset.ChildProperty。Assetプロパティが変更されたときに通知が届かないため、現在は機能しません。AssetIDが変更されるたびにAssetプロパティの通知がトリガーされるように調整するにはどうすればよいですか?

public static readonly DependencyProperty AssetIdProperty = DependencyProperty.Register("AssetId", typeof(string), typeof(GaugeBaseControl));

[Browsable(false), DataMember]
public string AssetId
{
    get { return (string)GetValue(AssetIdProperty); }
    set { SetValue(AssetIdProperty, value); }
}

[DisplayName("Asset Item"), Category("Value Binding")]
public AssetViewModel Asset
{
    get { return Manager.Models.FirstOrDefault(m => m.Model.UniqueId == AssetId); }
    set
    {
        if (value == null)
            AssetId = string.Empty;
        else
            AssetId = value.Model.UniqueId;
    }
}
4

2 に答える 2

2

の値が変更されたときに呼び出されるコールバックメソッドを指定して、PropertyMetadataそのコールバックメソッドからイベントを発生させることができます。DependencyPropertyDependencyPropertyPropertyChanged

public class MyClass : DependencyObject, INotifyPropertyChanged
{

    public MyClass ()
    {
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public bool State
    {
        get { return (bool)this.GetValue(StateProperty); }
        set { this.SetValue(StateProperty, value); } 
    }

    public static readonly DependencyProperty StateProperty =
        DependencyProperty.Register(
            "State", 
            typeof(bool), 
            typeof(MyClass),
            new PropertyMetadata(
                false, // Default value
                new PropertyChangedCallback(OnDependencyPropertyChange)));

    private static void OnDependencyPropertyChange(
        DependencyObject d, 
        DependencyPropertyChangedEventArgs e)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(d, 
                new PropertyChangedEventArgs(e.Property.Name);
        }
    }
}

PropertyChangedプロパティのセッターからイベントを発生させる場合、バインディングは。ではなく直接State呼び出すため、プロパティがバインドされたときにイベントは発生しません。StatePropertyState

于 2013-01-03T18:04:44.710 に答える
1

変更時にイベントを実装INotifyPropertyChangedして発生させます(setterメソッドで)。PropertyChangedAsset

于 2013-01-03T17:49:41.537 に答える