Имя объекта предназначено исключительно для потребления человеком (или для любых инструментов для потребления человеком, таких как компилятор MIB или IDE). Протокол SNMP имеет дело только с OID.
Таким образом, наихудшим было бы отказаться от добавления новой записи, поскольку с тех пор вы сломаете все приложения, которые используют старый OID.
Ваше решение - ЗАМЕНИТЬ OldName на NewName, а не добавлять его в ПОСЛЕДОВАТЕЛЬНОСТЬ.
Если вы хотите быть в безопасности, вы можете добавить предложение OBJECT IDENTIFIER, которое делает эквивалентность второго имени для этого OID, в вашем примере после определения NewName, например.
NewName OBJECT-TYPE
...
::= { tableentry N }
-- N is a decimal number
Вы можете добавить
OldName OBJECT IDENTIFIER ::= { tableentry N }
Не уверенный, что Вы подразумеваете под TreeNodes.
Обычно у Вас было бы соответствие IsSelected
свойство на Вашей модели представления, с которой связывает Ваше представление:
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Поэтому Вы просто циклично выполнились бы через элементы данных в Вашей модели представления и установили бы IsSelected = false
там.
Однако это кажется, что у Вас нет такого свойства. При этом необходимо получить соответствие TreeViewItem
для каждого элемента данных. Посмотрите TreeView.ItemContainerGenerator
свойство для получения информации о том, как сделать это. Что-то как:
var treeViewItem = _treeView.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem;
treeViewItem.IsSelected = false;
Найдите выбранный пункт и установите значение:
private void Button_Click(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = treeviewExample.SelectedItem as TreeViewItem;
if (tvi != null)
{
tvi.IsSelected = false;
}
}
Я столкнулся с теми же проблемами и написал следующий код, который будет работать с любым древовидным списком, с вызовом только одной строки для первой функции.
class TomWrightsUtils
{
public static void ClearTreeViewSelection(TreeView tv)
{
if (tv != null)
ClearTreeViewItemsControlSelection(tv.Items, tv.ItemContainerGenerator);
}
private static void ClearTreeViewItemsControlSelection(ItemCollection ic, ItemContainerGenerator icg)
{
if ((ic != null) && (icg != null))
for (int i = 0; i < ic.Count; i++)
{
TreeViewItem tvi = icg.ContainerFromIndex(i) as TreeViewItem;
if (tvi != null)
{
ClearTreeViewItemsControlSelection(tvi.Items, tvi.ItemContainerGenerator);
tvi.IsSelected = false;
}
}
}
}
Кажется, пока это работает, но я просто вставил его около 5 минут назад, так что используйте на свой страх и риск. В основном я хотел снять выделение, когда пользователь щелкает элемент управления в виде дерева, но не элемент дерева.
void DestinationTree_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TreeView tree = sender as TreeView;
DestinationClientViewModel selectedItem = tree.SelectedItem as DestinationClientViewModel;
if (selectedItem != null)
{
int selectedItemIndex = this.DestinationTree.Items.IndexOf(selectedItem);
if (selectedItemIndex > -1)
{
TreeViewItem tvi = this.DestinationTree.ItemContainerGenerator.ContainerFromIndex(selectedItemIndex) as TreeViewItem;
if (tvi != null)
tvi.IsSelected = false;
}
}
}
Это работает отлично подходит как метод расширения, поэтому вы можете вызвать
youTreeview.ClearSelection();
using System.Windows.Forms;
using System.Windows.Controls;
namespace YourAppNamespace
{
public static void ClearSelection(this TreeView input)
{
// this should be some container that you put in
// possibly the actual treeviewitem, not sure on that though
var selected = input.SelectedItem;
if (selected == null)
return;
// in my case this works perfectly
var tvi = input.ItemContainerGenerator.ContainerFromItem(selected) as TreeViewItem;
var tvi = input.ItemContainerGenerator.ContainerFromItem(selected) as TreeViewItem;
if (tvi == null)
{
// it must be a child, heres a hack fix
// my nodes are inherited from TreeViewItemViewModel by Josh Smith
var child = selected as WPF.Controls.TreeViewItemViewModel;
if (child == null)
return;
child.IsSelected = false;
}
else
tvi.IsSelected = false;
}
}