大佬教程收集整理的这篇文章主要介绍了silverlight – DataGridTextColumn – 如何绑定IsReadonly?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
似乎唯一的选择是使用DataTemplate,但即使在这里我也面临两个主要问题:
<sdk:DataGrid Style="{Staticresource DataGridStylE}" x:Name="call_dataGrid" Itemssource="{Binding Calls}"> <sdk:DataGrid.columns> <sdk:DataGridTextcolumn Header="Call Time" Binding="{Binding Path=CallTimE}" /> <sdk:DataGridTemplatecolumn Header="Call Date"> <sdk:DataGridTemplatecolumn.CellEdiTingTemplate> <DataTemplate> <TextBox Text="{Binding Path=CallDatE}" IsReadOnly="{Binding Path=DataContext.IsInEditMode,ElementName=call_dataGrid,Converter={Staticresource NegationConverter}}"/> </DataTemplate> </sdk:DataGridTemplatecolumn.CellEdiTingTemplate> </sdk:DataGridTemplatecolumn>
我似乎无法编辑DataGridTextcolumn的模板,而是必须使用DataGridTemplatecolumn,如上所示.但是这会覆盖我之前在DataGridStyle中定义的所有样式.我的专栏甚至没有行标记,看起来与其他细胞完全不同.
第二个问题是,它仍然没有按预期工作.该模板中的文本框仍未设置为只读.我在这做错了什么?
非常感谢您对此的帮助,
更新
在下面有希望的回应之后我调整了代码但没有成功.
我已将DP的回调更改为以下内容
public class IsReadOnlyDpAttachable { public static void SetIsReadXOnly(DependencyObject obj,bool isReadOnly) { obj.SETVALue(IsReadXOnlyProperty,isReadOnly); } public static bool GetIsReadXOnly(DependencyObject obj) { return (bool)obj.GetValue(IsReadXOnlyProperty); } public static readonly DependencyProperty IsReadXOnlyProperty = DependencyProperty.RegisterAttached("IsReadXOnly",typeof(bool),typeof(IsReadOnlyDpAttachablE),new PropertyMetadata(false,CallBACk)); private static void CallBACk(DependencyObject d,DependencyPropertyChangedEventArgs E) { ((DataGrid)d).IsReadOnly = (bool)e.NewValue; } }
并且在DataGrid的IsReadOnly本身上设置DP,它工作得非常好,但是在这里我再也不需要它,因为IsReadOnly在这里已经是Dp并且无论如何都可以轻松绑定.但测试显示Dp工作正常:
<sdk:DataGrid PrismExt:IsReadOnlyDpAttachable.IsReadXOnly="{Binding IsInEditMode,Mode=TwoWay,Converter={Staticresource NegationConverter}}" Style="{Staticresource DataGridStylE}" CanUserReordercolumns="True" x:Name="call_dataGrid" AutoGeneratecolumns="false" Itemssource="{Binding Calls}">
但是,当我尝试在底层DataGridTextcolumn上使用DP时,它不会执行任何操作:
<Grid x:Name="LayoutRoot"> <sdk:DataGrid Style="{Staticresource DataGridStylE}" CanUserReordercolumns="True" x:Name="call_dataGrid" AutoGeneratecolumns="false" Itemssource="{Binding Calls}"> <sdk:DataGrid.columns> <sdk:DataGridTextcolumn Header="Call Time" Binding="{Binding Path=CallTimE}" PrismExt:IsReadOnlyDpAttachable.IsReadXOnly="{Binding DataContext.IsInEditMode,ElementName=LayoutRoot,Converter={Staticresource NegationConverter}}"/> </sdk:DataGrid.columns> </sdk:DataGrid> </Grid>
任何的想法?
public class Class1 { public static void SetIsReadOnly(DependencyObject obj,bool isReadOnly) { obj.SETVALue(IsReadOnlyProperty,isReadOnly); } public static bool GetIsReadOnly(DependencyObject obj) { return (bool)obj.GetValue(IsReadOnlyProperty); } // Using a DependencyProperty as the backing store for MyProperty. This enables animation,styling,binding,etc... public static readonly DependencyProperty IsReadOnlyProperty = DependencyProperty.RegisterAttached("IsReadOnly",typeof(Class1),CallBACk)); private static void CallBACk(DependencyObject d,DependencyPropertyChangedEventArgs E) { ((DataGridTextcolumn)d).IsReadOnly = (bool)e.NewValue; } }
在您的xaml中,您可以使用附加属性.
<sdk:DataGridTextcolumn local:Class1.IsReadOnly="True" Binding="{Binding Property1}" Header="Property1"/>
希望这可以帮助.
以上是大佬教程为你收集整理的silverlight – DataGridTextColumn – 如何绑定IsReadonly?全部内容,希望文章能够帮你解决silverlight – DataGridTextColumn – 如何绑定IsReadonly?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。