WPF CheckBox z innego okna, który ukrywa kolumny

0

Witam,
Mam problem z pewną funkcjonalnością programu, który piszę. Otóż, o ile działa ona w obrębie tego samego okna, to nie potrafię napisać podobnej opcji, ale z użyciem innego okna.

Założenie:

  1. Użytkownik klika na przycisk w oknie głównym.
  2. System wyświetla nowe okno z checkbox'ami.
  3. Checkboxy bindowane są z wartościami bool w osobnej klasie.
  4. Użytkownik zaznaczając/odznaczając checkbox pokazuje/ukrywa kolumne z komponentu DataGrid

Klasa z wartością bool:

public class ColumnsView : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private bool _sample_checkbox;
        public bool sample_checkbox
        {
            get { return this._sample_checkbox; }
            set
            {
                _sample_checkbox= value;
                NotifyPropertyChanged("sample_checkbox"); 
            }
        }
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }

Klasa główna (XAML):

<Window x:Class="Sample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Books - list of Your books (borrowed and not)" 
        Height="460" Width="1010" 
        ResizeMode="NoResize" 
        WindowStartupLocation ="CenterScreen">

        <Window.Resources>
            <local:ColumnsView x:Key="columnsView"/>
            <BooleanToVisibilityConverter x:Key="BoolToVis"/>
        </Window.Resources>

        <Grid>
            <DataGrid 
                x:Name="list" 
                HorizontalAlignment="Left" 
                Margin="10,81,0,10" 
                Width="990" 
                AutoGenerateColumns="false" 
                SelectionMode="Single" 
                BorderBrush="Black" 
                Background="Black" 
                Foreground="Black" 
                OpacityMask="Black">
                    <DataGrid.Columns>
                        <DataGridTextColumn 
                             x:Name="sample_col" 
                             Binding="{Binding data}" 
                             ClipboardContentBinding="{x:Null}" 
                             Header="ID" 
                             CanUserResize="False"                          
                             Width="25" 
                             IsReadOnly="True" 
                             CanUserSort="True" 
                             Visibility="{Binding Source={StaticResource columnsView}, Path=sample_checkbox, Converter={StaticResource BoolToVis}}"/>                                             
                        </DataGrid.Columns>
           </Grid>
      </DataGrid>
</Window>

Klasa z oknem zawierajacym checkbox (XAML):

<Window x:Class="Sample.OptionsForm"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Choose columns You want to view" 
		Height="232" 
		Width="300" 
		WindowStartupLocation ="CenterScreen">
 
		<Window.Resources>
			<local:ColumnsView x:Key="columnsView"/>
		</Window.Resources>
 
		<Grid>
			<Button Content="OK" 
					HorizontalAlignment="Left" 
					Margin="85,150,0,0" 
					VerticalAlignment="Top" 
					Width="115" 
					Height="30" 
					Click="Button_Click"/>
                        <CheckBox x:Name="sample_CB" 
				  Content="Sample Column" 
				  HorizontalAlignment="Left" 
				  Margin="85,32,0,0" 
                                  VerticalAlignment="Top" 
				  RenderTransformOrigin="0.07,-0.333" 
				  IsChecked="{Binding Source={StaticResource columnsView}, Path=sample_checkbox, Mode=TwoWay}/>
		</Grid>
</Window>

Problem polega na tym, że tak ustawione parametry jak w powyższym przykładzie powodują ukrycie kolumn, ale ich stan nie zmienia się w zależności od kliknięcia checkbox'a.

0

Tak na szybko to zmień tu

 Visibility="{Binding Source={StaticResource columnsView}, Path=sample_checkbox, Converter={StaticResource BoolToVis}}"/>                      

na DynamicResource. Static wykonuje się tylko raz pod odpaleniu aplikacji.

0

Chyba nie potrafię :(
Zmieniam na DynamicResource, ale wtedy sypie błędem:

„DynamicResourceExtension” nie można ustawić we właściwości „Source” typu „Binding”. „DynamicResourceExtension” można ustawić tylko we właściwości DependencyProperty obiektu DependencyObject.

Kiedy dodaję do klasy ColumnsView konstruktur i DependencyProperty:

        public ColumnsView() : base() { }

        public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
          "State", typeof(Boolean), typeof(ColumnsView), new PropertyMetadata(false));

to również sypie błędem:

Wywołanie konstruktora dla typu „Sample.MainWindow” zgodnego z określonymi ograniczeniami wiązania spowodowało wyjątek., numer wiersza 6, pozycja 9.

czyli InitializeComponent(); w klasie głównej...

0

W domu zajrze do kodu dokladniej. Mozliwe ze zle ci podalem

1 użytkowników online, w tym zalogowanych: 0, gości: 1