Tôi có một hộp kiểm, và một ItemsControl Populating nhiều lưới dữ liệu sủ theo cách sau:WPF Binding để ElementName bên ItemsControl
<Checkbox Content="Birthday Column Visible" x:Name="UI_BirthdayVisibleCB" />
<ItemsControl ItemsSource="{Binding Path=ParentsCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Children}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Birthday" Width="120" Visibility="{Binding IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" >
...
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Rest of closing tags>
Điều này tạo ra ràng buộc lỗi đầu ra như nó cố gắng tìm IsChecked trên DataGridTemplateColumn. Nếu tôi cố gắng tìm kiếm một tổ tiên tương đối tôi nhận được ngoại lệ:
Binding.RelativeSource cannot be set while using Binding.ElementName.
Tôi có một ViewModel, và dính vào MVVM chủ yếu, nhưng trong trường hợp này, tôi thực sự muốn giữ cho chế độ hiển thị cột trên các Xem lớp . Lưu ý rằng BoolToVis
chỉ chuyển đổi Boolean thành Visibility.
Sửa
Dưới đây là một ví dụ về những gì tôi đang cố gắng để làm:
<DataGridTemplateColumn Header="Birthday" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyView} }, Path=IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" />
Nó biên dịch nhưng không chạy tuy nhiên, nó ném ngoại lệ trên.
Vấn đề là tôi cần cả tên phần tử và RelativeSource, vì DataContext của tôi được đặt thành mục hiện tại của ItemsControl. – bufferz
Hãy đăng mã sử dụng cả ElementName và RelativeSource. – McStretch
Ok - Tôi đã chỉnh sửa câu hỏi của mình để hiển thị những gì tôi đang cố gắng thực hiện. – bufferz