.Net v4 DataGridTextColumn.IsReadOnly scheint defekt sein
Ist, wenn ich eine Bindung an die IsReadOnly
Eigenschaft des DataGridTextColumn
es nicht verwirklichen. Wenn ich es durch markup, es funktioniert.
<DataGridTextColumn IsReadOnly="{Binding IsReferenceInactive}"/> <!-- NOP -->
<DataGridTextColumn IsReadOnly="True"/> <!-- Works as expected, cell is r/o -->
Den IsReferenceInactive
Eigenschaft ist ein DP und funktioniert gut (zu Testzwecken habe ich Band es zu einem Kontrollkästchen, das funktionierte)
Ist das eine bekannte Einschränkung?
Update
Uups, andere als ich schrieb, es ist eine Nachricht, in dem Ausgabe-Fenster:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsReferenceInactive; DataItem=null; target element is 'DataGridTextColumn' (HashCode=23836176); target property is 'IsReadOnly' (type 'Boolean')
Scheint dies zu sein eine:
- Antwort (bei " stackoverflow.com/a/18657986/401246 ") ist die beste (und sollte markiert als Angenommen) Beantworten, da es: a) Pflege auf original-Anzeige/ - Bearbeitung-Formate, b) ist nicht spezifisch für die Anzeige und Bearbeitung von sub-Elemente und c) ist die einfachste!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gleiche wie codekaizen aber einfacher:
UIElement.IsEnabled
macht auch die Zelle nicht auswählbare, was bedeutet, dass solche Spalten nicht naviaged auf der Tastatur, und Ihre Werte werden nicht in die Zwischenablage kopiert.DataGridColumn
s sind nicht Teil der visuellen Struktur, und nicht teilnehmen, verbindlich wie diese. Die Art, wie ich bekommen, um es zu verwendenDataGridTemplateColumn
.Gibt es andere workarounds, die ich gefunden habe, etwas zu hackish, aber Sie funktionieren; nämlich: http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx
Fand ich diese Lösung ermöglicht das binden an Daten, wenn der DataContext wird nicht vererbt:
http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/
Fügen Sie die
BindingProxy
Klasse Thomas schrieb, und fügen Sie diese Ressource in IhremDataGrid
:Nun können Sie die Bindung zu Ihrem
DataContex
über dieData
Eigenschaft desBindingProxy
so wie man es erwarten würde.Die Bindung der DataGridTextColumn funktioniert nur für die Text-Eigenschaft, aber nicht für die anderen Eigenschaften von DataGridTextColumn.
Lösung:
DataGridTextColumn sagt das DataGrid erstellen Sie einen TextBlock für jede Zeile und Spalte. Definieren Sie einen Stil für die TextBlock-und link-Stil mit dem Stil.- Taste, um den TextBlock aus, der die Spalte (ElementStyle).
Natürlich, der TextBlock, der muss sich jetzt finden, die das Objekt aus der Datenliste. Sie können tun, dass mit RelativeSource Binding mit der AncestorType=DataGridRow. Die DataGridRow bietet dann Zugriff auf das Objekt.
Etwas wie dieses:
Kompliziert, richtig ? Ich empfehle Ihnen, Lesen Sie meinen ausführlichen Artikel über die datagrid-Formatierung an:
http://www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings?msg=5037235#xx5037235xx
Viel Glück, Sie brauchen es 🙂
Wenn du wie @codekaizen die Lösung, aber wird das Aussehen der TextBox deaktiviert, dann wird dies den trick tun:
Ich gefunden habe, eine schöne Lösung zu verwenden DataGridColumns mit Bindung, indem eine MarkupExtension. Auf diese Weise Bindungen mit Wandlern verwendet werden könnten: https://stackoverflow.com/a/27465022/9758687