Binding a value to ConverterParameter - silverlight

I have a combobox control in xaml. Whatever is selected in combobox, I want it to be appended to the text in below TextBox. How can this be achieved?
<TextBox Text="{Binding Entity.Value.Minvalue,
Converter={StaticResource ConverterName},
ConverterParameter=???,
Mode=TwoWay}"/>
Can we pass Entity/Property in ConverterParameter? Any pointers in the direction how it can be achieved are greatly appreciated.

Try this
<Grid x:Name="LayoutRoot" >
<ComboBox x:Name="Cmb" Background="Red" Height="35" Width="300" >
<ComboBoxItem Content="ComboBoxItem1"></ComboBoxItem>
<ComboBoxItem Content="ComboBoxItem1"></ComboBoxItem>
<ComboBoxItem Content="ComboBoxItem1"></ComboBoxItem>
<ComboBoxItem Content="ComboBoxItem1"></ComboBoxItem>
</ComboBox>
<TextBox Text="{Binding ElementName=Cmb,Path=SelectedValue.Content,Mode=TwoWay}" HorizontalAlignment="Right" VerticalAlignment="Bottom"></TextBox>
</Grid>
Mode you can decide as per your requirement..

If you want to append text every time the SelectedItem changes for the ComboBox, you can listen to the SelectionChanged event and update the text.
<StackPanel>
<ComboBox x:Name="Combo" ItemSource="{Binding MyItems}" SelectionChanged="OnComboBoxSelectionChanged">
<!-- define your template -->
</ComboBox>
<TextBlock x:Name="AppendingText" Text=""/>
</StackPanel>
In your code begind, in the OnComboBoxSelectionChanged, add to the text
// You probably want to cast SelectedItem to your model and get a property from it
AppendingText.Text += Combo.SelectedItem.ToString();

Related

How can I access the controls in a listbox control generated by an itemtemplate

I have a listbox and a dataTemplate defined like so:
<Window.Resources>
<DataTemplate x:Key="propertyTemplate">
<StackPanel Margin="8" Orientation="Horizontal">
<CheckBox Name="Chosen"/>
<TextBlock Text="{Binding Path=MAP}" Margin="10,0,0,0"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="100" Margin="388,203,0,0" VerticalAlignment="Top" Width="522"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource propertyTemplate}"/>
I populate the listbox using a linq query:
Dim propertyList = (from a In db.properties
select a).ToList()
listbox.datacontext = propertyList
I want to check and set the value of the "Chosen" checkbox for each item in the listbox. Is there a way for me to do this?
Don't do it, bind IsChecked to a property on your item class, then iterate over your source list.

Link textbox to combobox - not working

I have a WPF usercontrol with a combobox & textbox. I want the textbox to hold the value of the selected item in the combobox and it works fine if I use SelectedValue in the binding path. However if I try to use the Title column of the combobox (SelectedValue.Title) the value of the textbox is overwritten but nothing is displayed. Can anyone tell me what I am doing wrong? My code sample is below. I am a newbie at this so please be kind :)
<ComboBox x:Name="ComboProject" Grid.Column="4" Grid.Row="0" TabIndex="14"
ItemsSource="{Binding Source={StaticResource Projects}, XPath=./Project}"
SelectedValuePath="#Item"
Tag="Project Number"
TextSearch.TextPath="#Item">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text= "{Binding XPath= #Item}" Width="90" />
<TextBlock Text= "{Binding XPath= #Title}" Width="220" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBox x:Name="loaded" Text="{Binding Path=SelectedValue.Title, NotifyOnSourceUpdated=True, ElementName=ComboProject}" Grid.Row="2" Grid.Column="4" Tag="Project Title" TabIndex="15"/>
You set SelectedValuePath="#Item", so that's what SelectedValue has right now. Try setting it to Title and binding directly to SelectedValue:
<ComboBox x:Name="ComboProject"
ItemsSource="{Binding Source={StaticResource Projects}, XPath=./Project}"
SelectedValuePath="#Title">
<ComboBox.ItemTemplate>
...
</ComboBox.ItemTemplate>
</ComboBox>
<TextBox Text="{Binding SelectedValue, ElementName=ComboProject}" />
I removed some other code for clarity of example.
EDIT :
Ok, if you want to use SelectedValue for other purposes we can bind TextBox to SelectedItem instead. If the Title is an attribute of a selected XML node, then we can access it like this:
<TextBox Text="{Binding SelectedItem.Attributes[Title].Value, Mode=OneWay, ElementName=ComboProject}" />

Binding ComboBox with one Item define and one dynamic

I have ComboBox with one define ComboBoxItem and one with TextBox as template.
Something like this:
<ComboBox Grid.Column="1" Grid.Row="4" Margin="3" VerticalAlignment="Center" SelectedItem="{Binding Repeatable}">
<ComboBoxItem Content="unbounded"/>
<ListBoxItem>
<ListBoxItem.Template>
<ControlTemplate>
<TextBox Text="{Binding Repeatable, Mode=TwoWay}" Width="200"/>
</ControlTemplate>
</ListBoxItem.Template>
</ListBoxItem>
</ComboBox>
My problem is that i don't know ho to bind a Repeatable string property.
If Repeatable = unbounded, I've need select ConboBoxItem and, if other string need fill text property of TextBox.
On click of any item in ComboBox, the value must be shown as selected.
Don't know ho to do that. Thanks for answers and ideas.
Try this:
<ComboBox Text="{Binding Repeatable}" IsEditable="True">
<ComboBoxItem Content="unbounded"/>
</ComboBox>

Multiselect ComboBox, Force it to always display the same text

I have a multiselect combobox that works fine. Except for the text. I want it to always have the same text ("Commodity Filter") regardless of what the user has selected.
If I set iseditable to true and the text to CommodityFilter it looks fine until the user makes a selection, then it is garbage (displays object type name). How can I hard code some text there? (Actually ideally i would databind it so it can change depending on whether anything is selected, but that would be a bonus at this point)
<ComboBox IsEditable="True" Text ="Commodity Filter" ItemsSource="{Binding Path=ActiveCommodities}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding Commodity}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
I ended up creating a custom object for populating the ComboBox (which had the IsSelected property and implemented INotifyPropertyChanged) because I was creating several comboboxes to control filtering. Once I did this is was trivial to override the tostring on the customobject and pass in the appropriate text. So the xaml did not change much.
I would have preferred to overlay with a text box but that seemed to be beyond my abilities to get a polished look in a reasonable time.
<ComboBox ItemsSource="{Binding Path=ActiveFuturesMonths}"
IsEditable="True"
IsReadOnly="True"
Text="Futures Month Filter" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding Text}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Actually the crux is in setting -
IsEditable="True"
IsReadOnly="True"
Text="Futures Month Filter"
rather than creating custom object. thanks a lot it helped.

WPF DataGrid - Problem Customizing a ComboBox

I have a Datagrid with a combo box bound column that works great as follows:
<tk:DataGridComboBoxColumn SelectedValueBinding="{Binding DefaultLocationID}"
SelectedValuePath="LocationID"
DisplayMemberPath="LocationName"
Header="Default Location"
ItemsSource="{Binding Source={StaticResource CustomerLocations}}">
</tk:DataGridComboBoxColumn>
Ultimately I want to customize the dropdown to show 'ID' and 'Name' together so a TemplateColumn seems to be the way to go. Starting small, I can't get the following simple example to work which should replace the standard DataGridComboBoxColumn. The dropdown appears fine, but when I 'select' a dropdown item, it does not accept and goes back to the previous value. I've tried variations on 'Mode=TwoWay' but no luck. Do I need a 'CellEditingTemplate' ?
DefaultLocationID is the foreign-key field being edited, while 'LocationID' is a column in 'CustomerLocations'.
<tk:DataGridTemplateColumn Header="Default Location">
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox VerticalAlignment="Top"
SelectedItem="{Binding LocationID, Mode=TwoWay}"
SelectedValue="{Binding DefaultLocationID, Mode=TwoWay}"
ItemsSource="{Binding Source={StaticResource CustomerLocations}}"
SelectedValuePath="LocationID"
DisplayMemberPath="LocationName" >
</ComboBox>
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
Thanks!!
Can you post the relevant parts of your CustomerLocations resource? Can you also post the type of class that your grid is binding to?
Try removing the SelectedValuePath, DisplayMemberPath and SelectedValue from the ComboBox.
If you want to display multiple pieces of data in your combobox see the below XAML
<ComboBox ...>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding LocationId}"} />
<TextBlock Text=" - "/>
<TextBlock Text="{Binding LocationName}"} />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

Resources