How to remove NewItemPlaceholder at TreeView wpf

后端 未结 4 561
野性不改
野性不改 2021-01-16 05:04

I bind ObservableCollection to ListView and I get {NewItemPlaceholder} line at the end. How can I hide or remove that line?

相关标签:
4条回答
  • 2021-01-16 05:20

    Suddenly I solved my problem. The problem was that on the same window I had a DataGrid binded to the same collection. I think that I had to make the DataGrid readonly to eliminate that row in the TreeView. However the DataGrid was just for testing purpose so the problem is gone.

    0 讨论(0)
  • 2021-01-16 05:36

    Just set an ItemTemplate in the XAML for the ListView (in my example a TreeView, where the same failure happens), and bind it to a filter converter. This could look like this:

    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <ContentControl Content="{Binding Converter={StaticResource IgnoreNewItemPlaceholderConverter}}"/>                  
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
    

    Now you have to add a Filter-Converter-Class like this:

    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();
        }
    }
    

    And don't forget to map this Filterclass a static resource in your XAML with something like this:

    <converter:IgnoreNewItemPlaceholderConverter x:Key="IgnoreNewItemPlaceholderConverter"/>
    

    This is caused by a DataGrid beeing bound to the same datasource, that is not "IsReadOnly=True" (writable). If this still fits your requirements, you can also try to make the DataGrid readonly or to bind to a different datasource.

    0 讨论(0)
  • 2021-01-16 05:42

    Like alot of people, I had the same issues but after some thinking, it occured to me that I could just create a bool property in the ViewModel and bind it to the DataGrid CanUserAddRows Property like below. Then I can make the property true or false as needed:

    private bool _canUserAddRows;
        public bool CanUserAddRows
        {
            get { return _canUserAddRows; }
            set
            {
                _canUserAddRows = value;
    
                NotifyPropertyChanged("CanUserAddRows");
            }
        }
    

    <--!--DataGrid property --!-->
    CanUserAddRows="{Binding CanUserAddRows,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

    This is easier and works very well. Hope it helps you.

    0 讨论(0)
  • 2021-01-16 05:44

    Old question but just came across this problem. I have a treeview & datagrid bound to the same datasource; however making the datagrid IsReadOnly=true wasn't an option because I need to be able to edit the datagrid. I found that setting CanUserAddRows=false fixed the issue and still allowed me to edit the Datagrid.

    0 讨论(0)
提交回复
热议问题