Вот кусок моего XAML:как связать значение свойства столбца TreeView в WPF
<Grid>
<dxg:TreeListControl x:Name="HierarchyTreeControl" ItemsSource="{Binding MenuItems}" EnableSmartColumnsGeneration="False" HorizontalAlignment="Left" Margin="0" VerticalAlignment="Top" SelectionMode="Row" AutoGenerateColumns="None">
<dx:TreeListColumn FieldName="Name" Header="Title" Width="50" />
<dx:TreeListColumn FieldName="URL" Header="Link" Width="150" />
<dx:TreeListColumn Binding="{Binding HasChildren}" Header="Has any children" Width="20" BestFitArea="Header" AllowResizing="False" ShowInColumnChooser="True" Visible="True" >
<dx:TreeListColumn.EditSettings>
<dxe:CheckEditSettings />
</dx:TreeListColumn.EditSettings>
</dx:TreeListColumn>
<dx:TreeListColumn Binding="{Binding IsChecked}" Header="Удалить" ReadOnly="False" AllowEditing="{Binding Path=HasChildren, Converter={StaticResource BoolToFalseConverter}, UpdateSourceTrigger=PropertyChanged}" Width="20" BestFitArea="Header" AllowResizing="False" ShowInColumnChooser="True" Visible="True" >
<dx:TreeListColumn.EditSettings>
<dxe:CheckEditSettings />
</dx:TreeListColumn.EditSettings>
</dx:TreeListColumn>
<dxg:TreeListControl.View>
<dxg:TreeListView AllowPerPixelScrolling="True" ShowTotalSummary="False" KeyFieldName="ID" ParentFieldName="ParentID" TreeDerivationMode="Selfreference" AllowEditing="False" AutoExpandAllNodes="False" FetchSublevelChildrenOnExpand="False" AllowColumnMoving="False" AutoWidth="True" ShowNodeImages="False" />
</dxg:TreeListControl.View>
</dxg:TreeListControl>
</Grid>
где источник {MenuItems} является ObservableCollection<MenuItem>
Я хотел бы, чтобы позволить, чтобы проверить флажок в последнем столбце, только если свойство MenuItem.HasChildren = ложные
Я пытаюсь сделать с этим кодом:
AllowEditing = "{Binding Path = HasChildren, конвертер = {StaticResource BoolToFalseConverter}, UpdateSourceTrigger = PropertyChanged}"
Но это не работает, и я вижу, что преобразователь BoolToFalseConverter вызывает только один раз, для первой строки
Как выполнить задачу?
Update: Вот класс MenuItem
public class MenuItem : INotifyPropertyChanged
{
private int _id;
public int ID
{
get {return _id;}
set
{
if (_id == value)
return;
_id = value;
OnPropertyChanged("ID");
}
}
private string _name;
public string Name
{
get{return _name;}
set
{
if (_name == value)
return;
_name = value;
OnPropertyChanged("Name");
}
}
private string _url;
public string URL
{
get
{
return _url;
}
set
{
if (_url == value)
return;
_url = value;
OnPropertyChanged("URL");
}
}
private int _target;
public int Target
{
get{return _target;}
set
{
if (_target == value)
return;
_target = value;
OnPropertyChanged("Target");
}
}
private int? _parentID;
public int? ParentID
{
get{return _parentID;}
set
{
if ((_parentID == null && value == null) || _parentID == value)
return;
_parentID = value;
OnPropertyChanged("ParentID");
}
}
public bool HasChildren { get; set; }
private bool _isChecked;
public bool IsChecked
{
get{return _isChecked;}
set
{
if (_isChecked == value)
return;
_isChecked = value;
OnPropertyChanged("IsChecked");
}
}
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
HasChildren - это просто свойство bool MenuItem, только для чтения. –
HasChildren получает свое значение в некотором роде, моя догадка по вашему комментарию заключается в том, что он из поля. Я бы предложил изменить свойство HasChildren, чтобы получить & внутренний набор, чтобы он не изменялся извне класса, а затем в методе «set» обновлялось значение IsChecked. –
Я не хочу обновлять свойство HasChildren. Моя идея - изменить свойство AllowEditing этого флажка, основанное на значении HasChildren для каждой строки в treeview. –