【问题标题】:Set DataGrid cell value from variables not in DataSource从不在 DataSource 中的变量设置 DataGrid 单元格值
【发布时间】:2019-10-15 11:01:16
【问题描述】:

我有一个带有模板的DataGrid 集,这些模板在ViewModel 中填充了List。源是一个自定义类,到目前为止,每一列都从这个类中获取一个值。但是,我正在尝试添加一个新列,该列(例如)采用一个值并将其加倍。我该怎么办?此代码必须在 ViewModel 中,而不是视图后面的 C# 中。

<DataGridTemplateColumn Header="MyHeader" MaxWidth="250">
    <!--Header Template-->
    <DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{TemplateBinding Content}"/>
        </DataTemplate>
    </DataGridTemplateColumn.HeaderTemplate>
    <!--Cell Template-->
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyBinding}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

DataGrid 定义(所以ItemSource):

<DataGrid ItemsSource="{Binding Calibrations, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" AutoGenerateColumns="False" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">

【问题讨论】:

  • 添加数据对象的另一个属性?
  • 很遗憾,无法为其添加或删除属性。
  • @HarryAdams,对我的回答有任何反馈吗?
  • 道歉@ASh。完全忘记回应,完美运行。非常感谢。

标签: c# wpf data-binding datagrid


【解决方案1】:

尝试自定义实现 IValueConverter 以根据 viewmodel 属性(如果涉及许多 viewmodel 属性,则为 IMultiValueConverter)生成值:

public class MultiplyConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double d = (double)value;
        double mult = (double)parameter;
        return d*mult;         
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在视图中创建一个转换器实例(在资源中):

<DataGrid.Resources>
    <local:MultiplyConverter x:Key="mult" />
<DataGrid.Resources>

然后在Binding中使用:

<DataGridTextColumn Header="x2" IsReadOnly="True"
 Binding="{Binding Path=MyBinding, Converter={StaticResource mult}, ConverterParameter = 2.0}"/>

【讨论】:

    【解决方案2】:

    请尝试使用以下代码

    <DataTemplate>
        <TextBlock Text="{Binding DataContext.MY_VARIABLE, ElementName=YOUR_DATAGRID_NAME}"/>
    </DataTemplate>
    

    YOUR_DATAGRID_NAME:数据网格名称

    MY_VARIABLE : 变量名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2011-07-20
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多