मैं एक चेकबॉक्स है, और एक ItemsControl अंदर ElementName लिए बाइंडिंग कई datagrids निम्नलिखित तरीके से पॉप्युलेट:WPF 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>
यह आउटपुट त्रुटियों बंधन के रूप में यह DataGridTemplateColumn पर IsChecked खोजने की कोशिश करता पैदा करता है। मैं अपवाद प्राप्त अगर मैं एक सापेक्ष पूर्वज के लिए खोज करने की कोशिश:
Binding.RelativeSource cannot be set while using Binding.ElementName.
मैं एक ViewModel है, और ज्यादातर MVVM पर कायम है, लेकिन इस मामले में मैं वास्तव में देखें परत पर स्तंभ दृश्यताएं रखना चाहते हैं । ध्यान दें कि BoolToVis
बस बूलियन को दृश्यता में परिवर्तित करता है।
<DataGridTemplateColumn Header="Birthday" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyView} }, Path=IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" />
यह कम्पाइल लेकिन फिर भी नहीं चलता है, यह अपवाद ऊपर फेंकता है:
संपादित
यहाँ मैं क्या कर रहा हूँ का एक उदाहरण है।
समस्या यह है कि मुझे एलिमेंट नाम और सापेक्ष स्रोत दोनों की आवश्यकता है, क्योंकि मेरा डेटाकॉन्टेक्स्ट आइटम्स कंट्रोल के वर्तमान आइटम पर सेट है। – bufferz
कोड पोस्ट करें जो कि ElementName और RelativeSource दोनों का उपयोग करता है। – McStretch
ठीक है - मैंने यह दिखाने के लिए अपना प्रश्न संपादित किया कि मैं क्या करने का प्रयास कर रहा हूं। – bufferz