【发布时间】:2017-05-27 17:50:10
【问题描述】:
这是我的 XAML 的一部分:
<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 = false 时才允许检查最后一列中的复选框
我正在尝试使用此代码:
AllowEditing="{绑定路径=HasChildren, Converter={StaticResource BoolToFalseConverter},UpdateSourceTrigger=PropertyChanged}"
但这不起作用,我看到转换器 BoolToFalseConverter 只调用一次,第一行
如何完成任务?
更新: 这是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;
}
【问题讨论】:
标签: c# wpf data-binding treeview