Bind visibility of text box to view model property in a content template
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I am just trying to set a text box to collapsed in my GridViewColumnHeader.ContentTemplate. I believe everything is being done correctly but for some reason the text box won't collapse when the boolean property is set.
Information
- I have a View with a View Model that has a FilterRows boolean property.
- I am styling my grid view to allow users to set the FilterRows property and have filters for each header appear.
- I have tried using a BooleanToVisibilityConverter and a BooleanToCollapsedConverter.
- I have verified that the bool is being set in the view model when the user selects a check box.
BooleanToCollapsedConverter
This converter is in the same view as my grid view table. I know the converter works because I have used it on other UI elements in the same view.
<Grid.Resources>
<ResourceDictionary>
<local:BooleanToCollapsedConverter x:Key="BooleanToCollapsedConverter"/>
</ResourceDictionary>
</Grid.Resources>
This is the class for the booleanToCollapsedConverter
public class BooleanToCollapsedConverter : BaseValueConverter<BooleanToCollapsedConverter>
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
The View
Here is a the code for a part of grid view column where I am trying to use the converter within the style. The GridViewColumnHeader visibility is being set properly and collapsing as needed. The inner portion with the data template is not working though.
<GridViewColumn DisplayMemberBinding = "{Binding Description}"
Width="auto">
<GridViewColumnHeader Content = "Description"
Visibility="{Binding HeaderList[1].IsChecked, Converter={StaticResource BooleanToCollapsedConverter}}"
local:GridViewBehaviors.CollapseableColumn="True">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height = "25"
FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter}}"/>
<TextBlock Text = "Description" ></ TextBlock >
</ StackPanel >
</ DataTemplate >
</ GridViewColumnHeader.ContentTemplate >
</ GridViewColumnHeader >
</ GridViewColumn >
The View Model
This is my boolean property in the view model.
/// <summary>
/// True if the user wants to apply filters to the rows.
/// Once set the UI will display all filters
/// </summary>
public bool FilterRows
{
get => _filterRows;
set => Set(ref _filterRows, value);
}
Final Points
So overall I am just literally trying to collapse that text box when I check the Filter Rows: check box. Not sure if it has something to do with the style or I am doing something improperly? Any help would be greatly appreciated!
Thanks
c# wpf xaml data-binding converters
add a comment |
I am just trying to set a text box to collapsed in my GridViewColumnHeader.ContentTemplate. I believe everything is being done correctly but for some reason the text box won't collapse when the boolean property is set.
Information
- I have a View with a View Model that has a FilterRows boolean property.
- I am styling my grid view to allow users to set the FilterRows property and have filters for each header appear.
- I have tried using a BooleanToVisibilityConverter and a BooleanToCollapsedConverter.
- I have verified that the bool is being set in the view model when the user selects a check box.
BooleanToCollapsedConverter
This converter is in the same view as my grid view table. I know the converter works because I have used it on other UI elements in the same view.
<Grid.Resources>
<ResourceDictionary>
<local:BooleanToCollapsedConverter x:Key="BooleanToCollapsedConverter"/>
</ResourceDictionary>
</Grid.Resources>
This is the class for the booleanToCollapsedConverter
public class BooleanToCollapsedConverter : BaseValueConverter<BooleanToCollapsedConverter>
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
The View
Here is a the code for a part of grid view column where I am trying to use the converter within the style. The GridViewColumnHeader visibility is being set properly and collapsing as needed. The inner portion with the data template is not working though.
<GridViewColumn DisplayMemberBinding = "{Binding Description}"
Width="auto">
<GridViewColumnHeader Content = "Description"
Visibility="{Binding HeaderList[1].IsChecked, Converter={StaticResource BooleanToCollapsedConverter}}"
local:GridViewBehaviors.CollapseableColumn="True">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height = "25"
FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter}}"/>
<TextBlock Text = "Description" ></ TextBlock >
</ StackPanel >
</ DataTemplate >
</ GridViewColumnHeader.ContentTemplate >
</ GridViewColumnHeader >
</ GridViewColumn >
The View Model
This is my boolean property in the view model.
/// <summary>
/// True if the user wants to apply filters to the rows.
/// Once set the UI will display all filters
/// </summary>
public bool FilterRows
{
get => _filterRows;
set => Set(ref _filterRows, value);
}
Final Points
So overall I am just literally trying to collapse that text box when I check the Filter Rows: check box. Not sure if it has something to do with the style or I am doing something improperly? Any help would be greatly appreciated!
Thanks
c# wpf xaml data-binding converters
the propertyFilterRows
does not belong to each item of theGridView
. it belongs to another object. so you need to specify what is the object that hasFilterRows
and then find a way to point the binding path towards that. e.g. usingx:static
,RelativeSource
, implementParentViewModel
, etc...
– Bizhan
Jan 3 at 17:00
add a comment |
I am just trying to set a text box to collapsed in my GridViewColumnHeader.ContentTemplate. I believe everything is being done correctly but for some reason the text box won't collapse when the boolean property is set.
Information
- I have a View with a View Model that has a FilterRows boolean property.
- I am styling my grid view to allow users to set the FilterRows property and have filters for each header appear.
- I have tried using a BooleanToVisibilityConverter and a BooleanToCollapsedConverter.
- I have verified that the bool is being set in the view model when the user selects a check box.
BooleanToCollapsedConverter
This converter is in the same view as my grid view table. I know the converter works because I have used it on other UI elements in the same view.
<Grid.Resources>
<ResourceDictionary>
<local:BooleanToCollapsedConverter x:Key="BooleanToCollapsedConverter"/>
</ResourceDictionary>
</Grid.Resources>
This is the class for the booleanToCollapsedConverter
public class BooleanToCollapsedConverter : BaseValueConverter<BooleanToCollapsedConverter>
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
The View
Here is a the code for a part of grid view column where I am trying to use the converter within the style. The GridViewColumnHeader visibility is being set properly and collapsing as needed. The inner portion with the data template is not working though.
<GridViewColumn DisplayMemberBinding = "{Binding Description}"
Width="auto">
<GridViewColumnHeader Content = "Description"
Visibility="{Binding HeaderList[1].IsChecked, Converter={StaticResource BooleanToCollapsedConverter}}"
local:GridViewBehaviors.CollapseableColumn="True">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height = "25"
FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter}}"/>
<TextBlock Text = "Description" ></ TextBlock >
</ StackPanel >
</ DataTemplate >
</ GridViewColumnHeader.ContentTemplate >
</ GridViewColumnHeader >
</ GridViewColumn >
The View Model
This is my boolean property in the view model.
/// <summary>
/// True if the user wants to apply filters to the rows.
/// Once set the UI will display all filters
/// </summary>
public bool FilterRows
{
get => _filterRows;
set => Set(ref _filterRows, value);
}
Final Points
So overall I am just literally trying to collapse that text box when I check the Filter Rows: check box. Not sure if it has something to do with the style or I am doing something improperly? Any help would be greatly appreciated!
Thanks
c# wpf xaml data-binding converters
I am just trying to set a text box to collapsed in my GridViewColumnHeader.ContentTemplate. I believe everything is being done correctly but for some reason the text box won't collapse when the boolean property is set.
Information
- I have a View with a View Model that has a FilterRows boolean property.
- I am styling my grid view to allow users to set the FilterRows property and have filters for each header appear.
- I have tried using a BooleanToVisibilityConverter and a BooleanToCollapsedConverter.
- I have verified that the bool is being set in the view model when the user selects a check box.
BooleanToCollapsedConverter
This converter is in the same view as my grid view table. I know the converter works because I have used it on other UI elements in the same view.
<Grid.Resources>
<ResourceDictionary>
<local:BooleanToCollapsedConverter x:Key="BooleanToCollapsedConverter"/>
</ResourceDictionary>
</Grid.Resources>
This is the class for the booleanToCollapsedConverter
public class BooleanToCollapsedConverter : BaseValueConverter<BooleanToCollapsedConverter>
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
The View
Here is a the code for a part of grid view column where I am trying to use the converter within the style. The GridViewColumnHeader visibility is being set properly and collapsing as needed. The inner portion with the data template is not working though.
<GridViewColumn DisplayMemberBinding = "{Binding Description}"
Width="auto">
<GridViewColumnHeader Content = "Description"
Visibility="{Binding HeaderList[1].IsChecked, Converter={StaticResource BooleanToCollapsedConverter}}"
local:GridViewBehaviors.CollapseableColumn="True">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height = "25"
FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter}}"/>
<TextBlock Text = "Description" ></ TextBlock >
</ StackPanel >
</ DataTemplate >
</ GridViewColumnHeader.ContentTemplate >
</ GridViewColumnHeader >
</ GridViewColumn >
The View Model
This is my boolean property in the view model.
/// <summary>
/// True if the user wants to apply filters to the rows.
/// Once set the UI will display all filters
/// </summary>
public bool FilterRows
{
get => _filterRows;
set => Set(ref _filterRows, value);
}
Final Points
So overall I am just literally trying to collapse that text box when I check the Filter Rows: check box. Not sure if it has something to do with the style or I am doing something improperly? Any help would be greatly appreciated!
Thanks
c# wpf xaml data-binding converters
c# wpf xaml data-binding converters
asked Jan 3 at 16:21
SelthienSelthien
1338
1338
the propertyFilterRows
does not belong to each item of theGridView
. it belongs to another object. so you need to specify what is the object that hasFilterRows
and then find a way to point the binding path towards that. e.g. usingx:static
,RelativeSource
, implementParentViewModel
, etc...
– Bizhan
Jan 3 at 17:00
add a comment |
the propertyFilterRows
does not belong to each item of theGridView
. it belongs to another object. so you need to specify what is the object that hasFilterRows
and then find a way to point the binding path towards that. e.g. usingx:static
,RelativeSource
, implementParentViewModel
, etc...
– Bizhan
Jan 3 at 17:00
the property
FilterRows
does not belong to each item of the GridView
. it belongs to another object. so you need to specify what is the object that has FilterRows
and then find a way to point the binding path towards that. e.g. using x:static
, RelativeSource
, implement ParentViewModel
, etc...– Bizhan
Jan 3 at 17:00
the property
FilterRows
does not belong to each item of the GridView
. it belongs to another object. so you need to specify what is the object that has FilterRows
and then find a way to point the binding path towards that. e.g. using x:static
, RelativeSource
, implement ParentViewModel
, etc...– Bizhan
Jan 3 at 17:00
add a comment |
2 Answers
2
active
oldest
votes
try to set data source for textbox binding. How do I use WPF bindings with RelativeSource?
smth like this. typeOfAncestor is UserControl or a Window
{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
add a comment |
If the view model where the FilterRows
property is defined is the DataContext
of the parent DataGrid
, this should work:
<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding DataContext.FilterRows,
RelativeSource={RelativeSource AncestorType=DataGrid},
Converter={StaticResource BooleanToCollapsedConverter}}"/>
Also note that there is a built-in converter for converting between bool
and Visibility
that you can use instead of creating your own one:
<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54026103%2fbind-visibility-of-text-box-to-view-model-property-in-a-content-template%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
try to set data source for textbox binding. How do I use WPF bindings with RelativeSource?
smth like this. typeOfAncestor is UserControl or a Window
{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
add a comment |
try to set data source for textbox binding. How do I use WPF bindings with RelativeSource?
smth like this. typeOfAncestor is UserControl or a Window
{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
add a comment |
try to set data source for textbox binding. How do I use WPF bindings with RelativeSource?
smth like this. typeOfAncestor is UserControl or a Window
{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
try to set data source for textbox binding. How do I use WPF bindings with RelativeSource?
smth like this. typeOfAncestor is UserControl or a Window
{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
edited Jan 3 at 16:45
answered Jan 3 at 16:39
Paweł GórszczakPaweł Górszczak
23427
23427
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
add a comment |
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
I see what your saying. I tried using ancestor type of my page and it still did not work. The grid view is contained in a regular page. I have also tried using ancestor type of grid view and list view. (Grid view is in my list view). Still isn't working for some reason.
– Selthien
Jan 3 at 17:29
add a comment |
If the view model where the FilterRows
property is defined is the DataContext
of the parent DataGrid
, this should work:
<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding DataContext.FilterRows,
RelativeSource={RelativeSource AncestorType=DataGrid},
Converter={StaticResource BooleanToCollapsedConverter}}"/>
Also note that there is a built-in converter for converting between bool
and Visibility
that you can use instead of creating your own one:
<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />
add a comment |
If the view model where the FilterRows
property is defined is the DataContext
of the parent DataGrid
, this should work:
<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding DataContext.FilterRows,
RelativeSource={RelativeSource AncestorType=DataGrid},
Converter={StaticResource BooleanToCollapsedConverter}}"/>
Also note that there is a built-in converter for converting between bool
and Visibility
that you can use instead of creating your own one:
<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />
add a comment |
If the view model where the FilterRows
property is defined is the DataContext
of the parent DataGrid
, this should work:
<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding DataContext.FilterRows,
RelativeSource={RelativeSource AncestorType=DataGrid},
Converter={StaticResource BooleanToCollapsedConverter}}"/>
Also note that there is a built-in converter for converting between bool
and Visibility
that you can use instead of creating your own one:
<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />
If the view model where the FilterRows
property is defined is the DataContext
of the parent DataGrid
, this should work:
<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding DataContext.FilterRows,
RelativeSource={RelativeSource AncestorType=DataGrid},
Converter={StaticResource BooleanToCollapsedConverter}}"/>
Also note that there is a built-in converter for converting between bool
and Visibility
that you can use instead of creating your own one:
<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />
edited Jan 4 at 9:43
answered Jan 4 at 8:36
mm8mm8
89.3k81934
89.3k81934
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54026103%2fbind-visibility-of-text-box-to-view-model-property-in-a-content-template%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
the property
FilterRows
does not belong to each item of theGridView
. it belongs to another object. so you need to specify what is the object that hasFilterRows
and then find a way to point the binding path towards that. e.g. usingx:static
,RelativeSource
, implementParentViewModel
, etc...– Bizhan
Jan 3 at 17:00