Frage

In WPF Binding.Mode, bei der Auswahl Standard, es hängt in der Immobilie gebunden.

Ich bin auf der Suche nach Liste oder einige übereinkommen oder Informationen für den Standardeinstellungen für die verschiedenen Steuerelemente.
Ich meine, was Eigenschaften sind TwoWay durch Standard, und so auf.Alle links, Ideen, Gedanken und sogar die Wanderungen sind welcommed!

War es hilfreich?

Lösung

Ähnlich UpdateSourceTrigger, die Standardwert für die Eigenschaft Mode variiert für jede Eigenschaft.User-editable-Eigenschaften, wie TextBox.Text, ComboBox.Text, MenuItem.IsChecked, etc, haben TwoWay als Standard Wert Modus.Abbildung aus wenn das Standard ist TwoWay, anschauen die Abhängigkeitseigenschaft Informationen Abschnitt des Eigentums.Wenn er sagt, BindsTwoWayByDefault auf true festgelegt ist, dann ist der default-Modus Wert der Eigenschaft TwoWay.Um es zu tun programmgesteuert, erhalten die Eigenschaft Metadaten der Immobilie durch den Aufruf GetMetadata und dann überprüfen Sie die boolean Wert der BindsTwoWayByDefault Eigenschaft.

Quelle: https://web.archive.org/web/20100209025938/http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx

Der sicherste Weg wäre, um immer explizit sein, welche Art von Bindung Modus, die Sie wollen aus einer Bindung.

Andere Tipps

Hier ist ein Weg, um den Standardmodus von einem DP unterstützt zu finden -

  

.NET Reflector ist dein Freund. Mit Reflektor, suchen Sie nach TextBox und   Blick auf die Quelle für den statischen Konstruktor (.cctor()). Hier legen Sie   in der Lage, für die Registrierung der TextProperty den Code verwendet finden   DP:

TextProperty = DependencyProperty.Register
               (
                   "Text", 
                   typeof(string), 
                   typeof(TextBox), 
                   new FrameworkPropertyMetadata
                   (
                      string.Empty, 
                      FrameworkPropertyMetadataOptions.Journal |
                      FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
                      new PropertyChangedCallback(TextBox.OnTextPropertyChanged), 
                      new CoerceValueCallback(TextBox.CoerceText), 
                      true, 
                      UpdateSourceTrigger.LostFocus
                   )
                );
     

Beachten Sie, dass ein Parameter an die Methode Register übergeben wird angibt,   Der Standardmodus Bindung:   FrameworkPropertyMetadataOptions.BindsTwoWayByDefault. Wenn du benutzt   Reflektor für DP bei der Registrierung suchen TextBlock- Text, Sie   sehen, dass kein solcher Wert geführt wird, wobei in diesem Fall nehmen wir an, die   Bindung ist eine Möglichkeit, standardmäßig aktiviert.

Genommen von Bea Stöllnitz der Post: Wie kann ich eine explizite Aktualisierung innerhalb einer Vorlage Bindung

Obwohl eine Art von Liste wichtiger DPs, die wäre sehr hilfreich.

Wurde für eine Liste suchen und, vor allem, um herauszufinden, welche Bindungen Einbahn eingestellt werden könnten Leistung zu verbessern. Folgende Funktionen können Sie feststellen können, welche Kontrollen verwenden Zweiwege durch Standardbindung:

public IList<DependencyProperty> GetAttachedProperties(DependencyObject obj)
{
    var result = new List<DependencyProperty>();
    foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.Valid) }))
    {
        var dpd = DependencyPropertyDescriptor.FromProperty(pd);
        if (dpd != null)
        {
            result.Add(dpd.DependencyProperty);
        }
    }
    return result;
}

public bool IsBindsTwoWayByDefault(DependencyObject obj, DependencyProperty property)
{
    var metadata = property.GetMetadata(obj) as FrameworkPropertyMetadata;
    if (metadata != null)
    {
        return metadata.BindsTwoWayByDefault;
    }
    return false;
}

eine Druckfunktion verwenden, gibt uns eine Liste:

var objList = new List<DependencyObject> { new TextBox(), new TextBlock(), new Label(), new ComboBox(), new Button() };
foreach (var obj in objList)
{
    var props = GetAttachedProperties(obj);
    foreach (var prop in props)
    {
        if(IsBindsTwoWayByDefault(obj, prop))
            Debug.WriteLine($"{obj} : {prop.OwnerType}:{prop.Name}");
    }
}

Probenergebnis (Regeleigenschaften mit Zwei-Wege als Standardbindung)

System.Windows.Controls.TextBox : System.Windows.Controls.TextBox:Text
System.Windows.Controls.TextBox : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.TextBlock : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.Label : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:IsDropDownOpen
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:Text
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedIndex
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedItem
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedValue
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.Button : System.Windows.Controls.TextSearch:Text

Interessanterweise haben die meisten Kontrollen eine Textsearch Eigenschaft, die Bindung Zweiwege hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top