【问题标题】:Bind DataGridTextColumn to method WPF将 DataGridTextColumn 绑定到方法 WPF
【发布时间】:2015-04-29 15:11:40
【问题描述】:

是否可以将 DataGridTextColumn 绑定到我的 xaml.cs 中的方法?

这是我的 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>

我想将第二列绑定到以下函数

private string concatenarMoneda
    {
        get { 
            return viewModel.Registro.Costo.ToString() + " " + viewModel.Registro.SOSMoneda.Descripcion; 
        }
    }

这应该导致两个属性在同一列中连接

我已经看到这与文本块一起工作,但在这种情况下它不起作用。

Bind property to method

更新应要求提供更多代码

这是我的整个网格

  <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>

该网格被 XAML 中的父元素包围

另一方面,在我的 xaml.cs 中,我有上面显示的 concatenarMoneda 函数

我的 ViewModel 会从 Model 中获取所有数据...使用诸如此类的方法

public ObservableCollection<SOSItem> Items
    {
        get
        {
            if (_items == null)
            {
                _items = new ObservableCollection<SOSItem>(db.SOSItems.Select(AppRow => AppRow));
            }
            return _items;
        }
        set
        {
            _items = value;
            NotifyPropertyChanged("Items");
        }
    }

也许你建议的祖先类型应该不是

  AncestorType={x:Type Window}

?

【问题讨论】:

  • 当您使用多重绑定和 multiValueConverter 时可能会起作用
  • 在这里你可以找到这个codeproject.com/Articles/328978/…的例子
  • 我会尝试并回复您。对于这样一个小东西,似乎代码太多了!!但没关系
  • 我真的不知道如何在我的 dataGridTextColumn 中使用该转换器...我已经创建了转换器但找不到使用它的方法。 dataGridTextColumn 不接受多重绑定

标签: c# wpf xaml


【解决方案1】:

您需要使用 GertHermans 提到的 IMultiValueConverter。

 <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();
            }
        }

【讨论】:

  • 我刚试过,但它不工作..也许缺少什么?
  • 您能否发布更多代码以更好地了解您的问题
  • 我刚刚发布了一些我认为与问题相关的代码
  • 正如 Gert Hermans 所说,您需要使用 IMultiValueConverter。
猜你喜欢
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多