Strange Behaviour in DataGrid SilverLight 3 Control - silverlight-3.0

Here is the my Xaml Code. Here I have changed the Foreground of the cell depending on the current age of the person.
<data:DataGridTemplateColumn Header="First Name" Width="150" MinWidth="150" CanUserReorder="False" SortMemberPath="FirstName">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<TextBlock Foreground ="{Binding Path=DateOfBirth,Mode=OneWay,Converter={StaticResource CellColor}}" Text="{Binding FirstName}" ToolTipService.ToolTip="{Binding FirstName}" FontFamily="Arial" FontSize="11" VerticalAlignment="Center" Margin="5,0,0,0" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTextColumn Foreground ="{Binding Path=DateOfBirth,Mode=OneWay,Converter={StaticResource CellColor}}" Header="Last Name" Width="150" MinWidth="150" Binding="{Binding LastName}" CanUserSort="True" IsReadOnly="True" CanUserReorder="False"/>
When I run the above code it return following Exception
AG_E_PARSER_BAD_PROPERTY_VALU
My question is that when I remove the Foreground converter from the DataGridTextColumn Column it runs fine As the Foreground converter is applied in the DataGridTemplateColumn Column which will not through excepction. But when I used same Converter to the DataGridTextColumn it throw execption why, can anyone know why is th
is behaviour
thanks in advance.
Sorry Josh Einstein Here is the my return value from the converter
if (intAge > 25)
return new SolidColorBrush(Colors.Red);
else
return new SolidColorBrush(Colors.White);

Related

Twitter Character Counting

I want to implement a remaining character count feature for Twitter Twitt TextBox in Windows Phone 8 & Windows store 8.1.
Twitter limits Tweet length to 140 characters.If Textbox Text length exceeds 140 char,I'm not allowing user to twitt that text message.
If user enters any URLs in textBox,twitter api considers that Url length as 22 or 23.
How to implement a remaining character count feature with Urls?.If any method is available in Twiteer Api?
https://dev.twitter.com/overview/api/counting-characters
https://dev.twitter.com/overview/t.co
Thanks in advance.
This is a combination of simple, and surprisingly difficult.
So, I solved this with a behavior; I call it the SocialTextBoxBehavior.
You can download the source here: http://codepaste.net/j4ry9v
It easily supports a UI like this:
I certainly tested it to make sure it works. It seems to.
I added some nice properties you can bind back to your viewmodel:
MaxLength - you would likely set this to 140
MinLength - this is up to you, it defaults to 5
UrlLength - in your question you indicated 22 or 23 (it's a scalar value)
CurrentLength - current, adjusted text length; this is updated as the user types
CurrentRemaining - current, adjusted remaining; this is updated as the user types
IsValid - ensuring CurrentLength is between constraints; this is updated as the user types
The syntax to use the behavior is pretty straight-forward. I hope you think so.
Like this:
<StackPanel>
<TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<Interactivity:Interaction.Behaviors>
<Behaviors:SocialTextBoxBehavior x:Name="TwitterBehavior" />
</Interactivity:Interaction.Behaviors>
</TextBox>
<TextBlock Margin="0,10" DataContext="{Binding ElementName=TwitterBehavior}">
<Run Text="{Binding CurrentLength}" />
<Run Text="character(s) typed." />
<LineBreak />
<Run Text="{Binding RemainingLength}" />
<Run Text="character(s) remaining." />
<LineBreak />
<Run Text="{Binding MaxLength}" />
<Run Text="character(s) limit." />
<LineBreak />
<Run Text="Can submit? " />
<Run Text="{Binding IsValid}" />
</TextBlock>
<Button IsEnabled="{Binding IsValid, ElementName=TwitterBehavior}" />
</StackPanel>
Best of luck!

How to highlight selected row in a listbox for windows phone

I am trying to highlight the selected row in a list box and I am having difficulty getting it to work. I have looked online and the solutions that I found either involve using style.resources or style.trigger, both of which my program is saying aren't recognized.
The xaml code for my listbox is as follows:
<ListBox x:Name="selectClassCanvas_ListBox" Width="448" Height="488"
SelectionChanged="selectListSelectionChanged" Grid.RowSpan="2"
Canvas.Left="4" Canvas.Top="54" Background="White">
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem Width="450" BorderBrush="Black" BorderThickness="0,0,0,1">
<TextBlock Text="{Binding}" FontWeight="Bold"
Foreground="Black" Height="50"
FontSize="17"/>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Can someone please give me some instruction on how to get the selected row of a listbox to highlight?

Can't get to the properties of the datacontext

I have a Grid in a User Control that's placed in a Window that has 2 collections.
I'm looking for a way to get to Collection 2 from within my grid.
I already tried a couple of things:
ItemsSource="{Binding DataContext.Bicycles, RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type CollectionContainer}}}" />
and
<ComboBox Grid.Column="1" Grid.Row="2" ItemsSource="{Binding RelativeSource=
{RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1},
Path=DataContext.Bicycles}" DisplayMemberPath="Height" />
and
<ComboBox Grid.Column="1" Grid.Row="2" ItemsSource="{Binding RelativeSource=
{RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Companies}"
/>
But everytime my combobox ends up empty
When you run your app you should look in your 'Output' window that will tell you the binding errors that come up. So it will give you a clue as to what you're doing wrong.
It looks like you don't need the prefix DataContext. the datacontext of a child control is the datacontext of it's parent by default unless otherwise specified. So if the DataContext of the Window is some ViewModel the UserControl and it's child controls will have the same datacontext.
So you should probably only have to do this:
<ComboBox Grid.Column="1" Grid.Row="2" ItemsSource="{Binding Companies}" />

WPF XAML Binding

I have 2 tables Main and Maintest. I am using nhibernate to pull data from database and am joining 2 tables to fetch the fields from both.Now my final object has data from both the tables. Now when I debug my app I can see that I have 2 records from Main and 5 records from Maintest. But somehow I am not able to display records from Maintest.
<DataTemplate x:Key="myTaskTemplate">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding FirstName}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ListBox ItemsSource="{Binding Main}" ItemTemplate="{StaticResource myTaskTemplate}" Height="200" Width="200" />
<toolkit:DataGrid ItemsSource="{Binding Main.Maintest}" Margin="3"
AutoGenerateColumns="False"
CanUserAddRows="False" CanUserDeleteRows="False"
CanUserReorderColumns="False" CanUserResizeRows="False">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Header="#"
Binding="{Binding Number}"/>
<toolkit:DataGridTextColumn Header="Airline"
Binding="{Binding Code}"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
</StackPanel>
NHibernate Mapping:
<class name="Main" lazy="false">
<id name="ID" type="Int32">
<generator class="native"/>
</id>
<set name="Maintest" inverse="true">
<key column="Ticket" on-delete="cascade" />
<one-to-many class="Segment" />
</set>
....
I able to display listbox record but not toolkit records. Although I can see that for each Main record my object does have 3 or more records in Maintest.
Something doesn't add up...
ListBox.ItemsSource takes an IEnumerable of some kind - which means the property Main must be some kind of IEnumerable?
So, if what you're looking for is a Master-Detail kind of view - you need to change the XAML for the two controls like this - everything else should be fine:
<ListBox Name="Main" .../>
<toolkit:DataGrid ItemsSource="{Binding SelectedItem.Maintest,ElementName=Main}" .../>
This will make the DataGrid bind to the MainTest property of whatever obejct is selected in the ListBox.
Look to Bea Costa if you really need to get spiffy with Master-Detail scenarios.
Hope this helps!

WPF Binding Button.Command in ControlTemplate to property of ViewModel

My ViewModel has a property called Commands which is of type IDictionary.
For my data grid I have created a ControlTemplate for one of the fields using a button as follows:
<ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
<Button Style="{DynamicResource btnRemove}" Width="14" Height="14"
Content="{TemplateBinding Content} "
CommandParameter="{Binding ViewID}"
Command="{Binding Commands[AcknowledgeErrorCmd]}" />
<ControlTemplate.Triggers>
</ControlTemplate.Triggers>
</ControlTemplate>
Clicking on the button does nothing which tells me the binding did not work. However, an unstyled button added to the toolbar of the same window hosting this grid works, binds properly to this command. I guess my question is:
Hw do I bind the command property of a button used in a ControlTemplate to a ViewModel?
TIA.
I am not sure what the problem is but try to debug your solution and look into the output window with Debug selected in the combobox and you will see the errors that occur during binding. Maybe this will help you to the solution.
Provide me the error as a comment on this post if you don't understand it.
I did this instead:
<ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
<Border >
<TextBlock Margin="5">
<Hyperlink
CommandParameter="{Binding ElementName=root, Path=DataContext.ViewID}"
Command="{Binding ElementName=root, Path=DataContext.Commands[AcknowledgeErrorCmd]}">
<TextBlock Text="Acknowledge"/>
</Hyperlink>
</TextBlock>
</Border>
</ControlTemplate>
and that works fine. It may be related to the post Viko provided.

Resources