我将ObservableCollection绑定到ListView,最后得到{NewItemPlaceholder}行。如何隐藏或删除该行?
<TreeView ItemsSource="{Binding MyDataToDisplay}">
集合看起来像:
ObservableCollection<MyElement> MyDataToDisplay
答案 0 :(得分:2)
旧问题,但刚刚遇到这个问题。我有一个树视图&amp; datagrid绑定到同一数据源;然而,使数据网格IsReadOnly = true不是一个选项,因为我需要能够编辑数据网格。我发现设置CanUserAddRows = false修复了问题,仍允许我编辑Datagrid。
答案 1 :(得分:1)
只需在ListView的XAML中设置一个ItemTemplate(在我的例子中是TreeView,发生相同的故障),并将其绑定到过滤器转换器。这看起来像这样:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<ContentControl Content="{Binding Converter={StaticResource IgnoreNewItemPlaceholderConverter}}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
现在你必须像这样添加一个Filter-Converter-Class:
class IgnoreNewItemPlaceholderConverter : IValueConverter {
public static readonly IgnoreNewItemPlaceholderConverter Instance = new IgnoreNewItemPlaceholderConverter();
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (value != null && value.ToString() == "{NewItemPlaceholder}")
return DependencyProperty.UnsetValue;
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
}
并且不要忘记将此Filterclass映射到XAML中的静态资源,如下所示:
<converter:IgnoreNewItemPlaceholderConverter x:Key="IgnoreNewItemPlaceholderConverter"/>
这是由绑定到同一数据源的DataGrid绑定引起的,不是“IsReadOnly = True”(可写)。如果这仍然符合您的要求,您还可以尝试使DataGrid只读或绑定到不同的数据源。
答案 2 :(得分:1)
和很多人一样,我遇到了同样的问题,但经过一番思考后,我发现我可以在ViewModel中创建一个bool属性并将其绑定到DataGrid CanUserAddRows属性,如下所示。然后我可以根据需要使属性成为真或假:
private bool _canUserAddRows;
public bool CanUserAddRows
{
get { return _canUserAddRows; }
set
{
_canUserAddRows = value;
NotifyPropertyChanged("CanUserAddRows");
}
}
<--!--DataGrid property --!-->
CanUserAddRows="{Binding CanUserAddRows,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
&#13;
这更容易,效果也很好。希望它能帮到你。
答案 3 :(得分:0)
突然间我解决了我的问题。问题是在同一窗口上我有一个绑定到同一个集合的DataGrid。我认为我必须使DataGrid只读取消除TreeView中的那一行。但是,DataGrid仅用于测试目的,因此问题就消失了。