Как привязать свойство столбца datagrid isreadonly к другому свойству связанного элемента
Это, вероятно, легче показать в коде, чем спросить по-английски.
У меня есть список в моем представлении-модель, что-то вроде этого:
public class CostItems { public string Name { get; set; } ""; public double UnitCost { get; set; } = 0.0; public bool UnitCostFixed { get; set; } = false; } public List<CostItem> CostItems = new List<CostItem>();
И мой XAML для отображения этого выглядит примерно так:
<DataGrid Grid.Row="1" Grid.Column="0" ItemsSource="{Binding CostItems}" AutoGenerateColumns="False" HeadersVisibility="Column" SelectionUnit="Cell" SelectionMode="Single"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> <DataGridTextColumn Header="Unit Cost"> <DataGridTextColumn.Binding> <Binding Path="UnitCost" UpdateSourceTrigger="LostFocus"> <Binding.ValidationRules> <u:CurrencyNonNegativeValidator/> </Binding.ValidationRules> <Binding.Converter> <u:CurrencyConverter/> </Binding.Converter> </Binding> </DataGridTextColumn.Binding> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>
То, что я хочу сделать, - это связать
IsReadOnly
собственность компании DataGridTextColumn
это показывает, что UnitCost
к UnitCostFixed
свойство одного и того же элемента в списке.Я предполагаю, что мне нужна какая-то форма привязки RelativeSource, но не могу ее решить.
Как мне это сделать?
Что я уже пробовал:
Я пробовал смотреть на визуальное дерево, но оно, кажется, не показывает достаточно деталей (то есть оно останавливается на DataGrid.
Я также попытался увеличить отладочную информацию, поступающую из механизма привязки, установив :
diag:PresentationTraceSources.TraceLevel="High"но, похоже, я не получаю многого из того, что мне помогает.
Gerry Schmitz
Это не логично: вы хотите привязать свойство столбца к значению в "строке" (т. е. элементу). Это относится и к "клетке".
Patrick Skelton
Спасибо за ответ. Вы, конечно, правы. Вскоре после публикации я понял, что то, что я пытался сделать, просто не имело смысла. Я воздерживался от ответа, пока не получил что-то, что работает, и теперь я опубликовал это.