Ciao a tutti,
potrei essere demodé, ma mi imbatto in una situazione per me nuova.
Ho sempre usato MVVM, ma mai incapsulando della logica in una combobox all'interno di uno usercontrol.
Vorrei ottenere uno usercontrol tipizzato, che:
-popola la combobox nel costruttore dello user control
-gestisca setter e getter del selecteitem dall'esterno
Scenario:
Ho una scheda cliente con un campo BancaAppoggio, quindi, questa Window mostra l'oggetto Cliente.
La proprietà BancaRelativa mostra l'attuale banca del cliente.
Dovrei mostrare il mio ComboBoxUserControl passandogli il Cliente.BancaRelativa, lui mi mostra la banca corrente e mi fornisce l'elenco delle banche (eventualmente per cambiare la banca del cliente), e quindi la gestione TwoWay del binding.
Arg!!!!
Ora creo una DependecyProperty nel ComboBoxUserControl
#region DP Value
public BancaAppoggio Banca
{
get { return (BancaAppoggio) GetValue(BancaAppoggioProperty); }
set { SetValue(BancaAppoggioProperty, value); }
}
public static readonly DependencyProperty BancaAppoggioProperty =
DependencyProperty.Register("Banca", typeof(BancaAppoggio),
typeof(BancheAppoggioComboBox), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, Changed));
private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var c = d as BancheAppoggioComboBox;
var i = (BancaAppoggio) e.NewValue;
if (c.LocalValue == null)
c.BancheAppoggioComboBox_Loaded(c, null);
c.LocalValue = i;
}
#endregion
Nella Window del cliente uso questo
<combobox:BancheAppoggioComboBox Banca="{Binding BancaRelativa, UpdateSourceTrigger=PropertyChanged}" Width="300"/>
Appena parte la Window so che scatta il setter della proprietà Cliente.BancaRelativa, ma non appare selezionata a livello visuale.
Se provo a cambiare la banca dalla combobox funziona il tutto.
Questo è lo usercontrol
<Grid x:Name="Root">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<telerik:RadButton Content="..." Width="25" Height="25" Margin="0,0,1,0"
Command="{Binding LookupCommand}"/>
<telerik:RadComboBox IsEditable="false" Grid.Column="1" CanAutocompleteSelectItems="True"
StaysOpenOnEdit="True"
ItemTemplate="{StaticResource ComboBoxTemplate}"
ItemsSource="{Binding BancheAppoggio}"
SelectedItem="{Binding Path=Banca,Mode=TwoWay,ElementName=userControl}">
<telerik:RadComboBox.FilteringBehavior>
<local:BancheAppoggioFilteringBehavior />
</telerik:RadComboBox.FilteringBehavior>
</telerik:RadComboBox>
</Grid>
Domanda:
1) Come posso rendere Cliente.BancaAppoggio un'istanza della List<BancaAppoggio> utilizzata nella ComboBox?
2) Mi sono posto la domanda giusta?
Modificato da dakyn77 il 28 aprile 2016 15.19 -