Reputation: 2631
Is it possible to bind a DataGridTextColumn to a method in my xaml.cs?
This is my XAML
<my:DataGrid.Columns>
<my:DataGridTextColumn Binding="{Binding IdItem}" Header="Id Item" Width="150" IsReadOnly="True"/>
<my:DataGridTextColumn Binding="{Binding concatenarMoneda}" Header="Costo" Width="*"/>
</my:DataGrid.Columns>
and I want to bind the second column to the following function
private string concatenarMoneda
{
get {
return viewModel.Registro.Costo.ToString() + " " + viewModel.Registro.SOSMoneda.Descripcion;
}
}
This should result in two properties being concatenated in the same column
I have seen this working with a textblock but it is not working in this case.
UPDATE more code as requested
this is my whole grid
<Grid Grid.Row="2" Background="{DynamicResource GrisOscuro}">
<my:DataGrid EnableRowVirtualization="False" x:Name="DataGridDatos" Margin="32"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
AutoGenerateColumns="False" Background="White"
SelectionChanged="DataGridDatos_SelectionChanged"
SelectedItem="{Binding Registro}"
ItemsSource="{Binding Registros}"
IsEnabled="{Binding DataGridDatosEstado}"
SelectedIndex="{Binding IndiceActual}"
IsReadOnly="True">
<my:DataGrid.Columns>
<my:DataGridTextColumn Binding="{Binding IdItem}" Header="Id Item" Width="150" IsReadOnly="True"/>
<my:DataGridTextColumn Binding="{Binding SOSProveedor.Nombre}" Header="Proveedor" Width="150" IsReadOnly="True"/>
<my:DataGridTextColumn Binding="{Binding SOSServicio.Descripcion}" Header="Servicio" Width="*"/>
<my:DataGridTextColumn Binding="{Binding SOSUbicacion.Descripcion}" Header="Ubicacion" Width="*"/>
<my:DataGridTextColumn Binding="{Binding SOSTipoPagoItem.Descripcion}" Header="Tipo Pago Item" Width="*"/>
<my:DataGridTextColumn Binding="{Binding FechaInicioVigencia , StringFormat={}{0:dd/MM/yy}}" Header="Fecha Inicio" Width="*"/>
<my:DataGridTextColumn Binding="{Binding Estatus}" Header="Estatus" Width="*"/>
<my:DataGridTextColumn Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},
Path=concatenarMoneda,Mode=OneWay}" Header="Costo" Width="*"/>
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
that grid is sorrounded by which is the parent element within the XAML
on the other in my xaml.cs I've got the concatenarMoneda function that I showed above
and my ViewModel brings all the data from the Model... using methods such as this
public ObservableCollection<SOSItem> Items
{
get
{
if (_items == null)
{
_items = new ObservableCollection<SOSItem>(db.SOSItems.Select(AppRow => AppRow));
}
return _items;
}
set
{
_items = value;
NotifyPropertyChanged("Items");
}
}
Maybe the ancestor type you suggest should be other than
AncestorType={x:Type Window}
?
Upvotes: 0
Views: 2008
Reputation: 5366
You need to use IMultiValueConverter as GertHermans mentioned.
<DataGridTextColumn Width="70" Header="Costo">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource ConcatConverter}">
<Binding Path="Costo" />
<Binding Path="SOSMoneda.Descripcion" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
public class ConcatConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameters, CultureInfo culture)
{
return values[0].ToString() + " " + values[1].ToString();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Upvotes: 1