WPF ซ่อน DataGridColumn ผ่านการผูก

ด้วยเหตุผลบางอย่าง ฉันไม่สามารถซ่อน DataGridColumn ของ WPF Toolkit ได้ ฉันกำลังพยายามทำสิ่งต่อไปนี้:

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly}">
<dg:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBox Text="{Binding Path=ItemDescription}" />
    </DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>

This doesn't work, since it's looking for a IsReadOnly property on the ItemSource (not a property of the current class). If add this as a property of the ItemSource class that implements INoifyPropertyChanged, it still doesn't hide the column. Is there a way around this? I want the column to hid when a button click changes IsReadOnly property.

สมมติว่า IsReadOnly ส่งกลับค่าการมองเห็นและเป็นคุณสมบัติการขึ้นต่อกัน

ฉันติดอยู่อย่างสมบูรณ์ ฉันขอขอบคุณความช่วยเหลือจริงๆ! ขอบคุณมาก!


person Greg R    schedule 25.03.2010    source แหล่งที่มา


คำตอบ (3)


หากคุณต้องการผูกเข้ากับคุณสมบัติ IsReadOnly ของ DataGridColumn เพียงเพิ่ม RelativeSource ลงใน Binding (และตัวแปลง):

<BooleanToVisibilityConverter x:Key="boolToVis" />

...

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly, RelativeSource={RelativeSource Self}, Converter={StaticResource boolToVis}}">

นอกจากนี้ ดูเหมือนว่า คำถาม StackOverflow นี้ อาจเกี่ยวข้องกับ ปัญหาของคุณ.

person Abe Heidebrecht    schedule 25.03.2010

โพสต์ในคำถามนี้:

WPF DataGrid: การเชื่อมโยง DataGridColumn มองเห็น ContextMenu MenuItems Ischeked (MVVM) < /ก>

Fubzot ใช้รหัสการเชื่อมโยงคล้ายกับ

Visibility='{Binding (FrameworkElement.DataContext).IsReadOnly,
RelativeSource={x:Static RelativeSource.Self}}'

คุณอาจต้องการตรวจสอบสิ่งนี้:

การส่งต่อ DataContext ของ DataGrid ไปยัง ' คอลัมน์..

ซึ่งมีการเชื่อมโยงในคำถามข้างต้นด้วย

เพียงเพื่อเป็นข้อมูลของฉัน: คุณเห็นข้อผิดพลาดในการผูกในหน้าต่างเอาท์พุตโดยใช้โค้ดปัจจุบันของคุณหรือไม่

person Ed Gonzalez    schedule 25.03.2010
comment
ขอบคุณมาก นี่คล้ายกับคำตอบด้านล่างมาก ฉันเห็นข้อผิดพลาดในการเชื่อมโยง ดังนั้นฉันจึงรู้ว่าฉันมีปัญหา :( - person Greg R; 26.03.2010

คุณต้องใช้ตัวแปลง

 Public Class BooleanToVisibilityConverter
        Implements IValueConverter
        Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
            If targetType Is GetType(Visibility) Then
                If CBool(value) = True Then
                    Return Visibility.Hidden
                Else
                    Return Visibility.Visible
                End If
            Else
                Return Nothing
            End If
        End Function

        Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
            Return Nothing
        End Function
    End Class

จากนั้นคุณใช้ตัวแปลงใน XAML ตัวอย่าง

person ecathell    schedule 25.03.2010
comment
สมมติว่า IsReadOnly ส่งกลับค่าการมองเห็นแล้ว นั่นไม่ใช่ปัญหาของฉัน ปัญหาของฉันคือตารางข้อมูลไม่ต้องการเคารพมัน - person Greg R; 25.03.2010
comment
โอเค..คำถามโง่ๆ ในคุณสมบัติ VM ของคุณ IsReadOnly คุณมี OnPropertyChanged (IsReadOnly) ใน setter ของคุณหรือไม่ ฉันรู้ว่าบางครั้งฉันลืมทำอย่างนั้น และ UI จะไม่ตอบสนองหากไม่มีมัน - person ecathell; 25.03.2010
comment
คลาส BooleanToVisibilityConverter มีอยู่แล้วใน System.Windows.Controls ไม่จำเป็นต้องสร้างใหม่ ;) - person Thomas Levesque; 25.03.2010