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:
- Użytkownik klika na przycisk w oknie głównym.
- System wyświetla nowe okno z checkbox'ami.
- Checkboxy bindowane są z wartościami bool w osobnej klasie.
- 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.