C# 如何将按钮隐藏在“中”;新行“;WPF数据网格中的模板?
我有一个网格,有图像和按钮,允许用户添加或删除图像。例如: 两个按钮的可见性都绑定到模型Xaml:C# 如何将按钮隐藏在“中”;新行“;WPF数据网格中的模板?,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,我有一个网格,有图像和按钮,允许用户添加或删除图像。例如: 两个按钮的可见性都绑定到模型Xaml: <DataGridTemplateColumn Header="Photo" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horiz
<DataGridTemplateColumn Header="Photo" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Name="btnAddPhoto" Content=" Add " Visibility="{Binding BtnAddPhotoVisibility}"></Button>
<Button Name="BtnExcludePhoto" Content=" Del " Visibility="{Binding BtnExcludePhotoVisibility}"></Button>
<Image MaxHeight="50" MaxWidth="50" Tag="Photo" Stretch="Uniform" Source="{Binding Photo}" MouseUp="OnMouseUpBinary" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
问题是:最后一行(用于添加iten)位于网格中,但在打开网格时未真正绑定(如图所示)。如果我在最后一行单击,将创建列表中的类,并触发操纵控件可见性的逻辑。编辑最后一行后,会发生以下情况:
问题是:当打开网格时,如何触发最后一行DEL按钮的可见性逻辑?我认为您的绑定中有一个NullReferenceExection
(this.Photo == null) || (this.Photo.Length == 0)
如果照片为null,则this.Photo.Length==0将引发NullReferenceExection
执行此操作。照片?.Length==0或经典:
if (this.Photo == null)
return Visibility.Collapsed;
else
if this.Photo.Lenght == 0
return Visibility.Collapsed;
....
尝试将绑定的
回退
属性设置为已折叠:
<Button Name="BtnExcludePhoto" Content=" Del "
Visibility="{Binding BtnExcludePhotoVisibility, FallbackValue=Collapsed}" />
默认情况下,当绑定无法解析时,此选项会将其折叠。看起来您缺少绑定通知(要隐藏
添加
按钮并显示删除
)。Google forINotifyPropertyChanged
,总体上阅读了有关MVVM的内容。我没有错过,谢谢。没有成功,但谢谢Sven。在调试代码时,getter被触发3次:对于ids 8、9和10。最后一行没有命中getter,因为列表中的对应类不存在。这意味着:网格有4行,但列表有3行。网格中的最后一项仅存在于可见集合中,而不存在于可观察集合中。当最后一行进入编辑模式时,第四个类是include,触发getter。谢谢,先生,这解决了问题。上帝保佑你和你的家人。
<Button Name="BtnExcludePhoto" Content=" Del "
Visibility="{Binding BtnExcludePhotoVisibility, FallbackValue=Collapsed}" />