【问题标题】:Binding single datagrid with list and individual data item将单个数据网格与列表和单个数据项绑定
【发布时间】:2016-10-13 13:34:56
【问题描述】:

我是 WPF 新手,正在尝试将数据绑定到数据网格。我有一个绑定到 Datagrid 的项目列表。同一个数据网格也有少数列(2 列),其值不是从列表中获取的,而是需要绑定到这两个数据网格列的单个值。任何人都可以帮我找到解决方案吗? 下面是xaml代码。

ItemList 是绑定到 DataGrid 的项目列表。它具有绑定到数据网格列的“PropertyName”和“PropertyValue”。

<DataGrid  x:Name="dtgridUpload"  AutoGenerateColumns="False" ItemsSource="{Binding ItemList}">
       <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding PropertyName}" IsReadOnly="True">
                  <DataGridTextColumn.Header>
                         <StackPanel Orientation="Horizontal">
                              <TextBlock Text="Name" />                                         
                        </StackPanel>
                 </DataGridTextColumn.Header>
            </DataGridTextColumn>
           <DataGridTextColumn Header="Value" Width="200" Binding="{Binding PropertyValue}"   IsReadOnly="True"/>
           <DataGridTextColumn Header="Unit"  Binding="{Binding PropertyUnit}" IsReadOnly="True"/>                               
           <DataGridTextColumn Header="Value1" Width="200"  IsReadOnly="{Binding Path=IsReadOnly}" Binding="{Binding PropertyName1}"/>
           <DataGridTextColumn Header="Unit1"  Binding="{Binding PropertyUnit1}"/>
     </DataGrid.Columns>
</DataGrid>

.cs代码

  private List<DeviceData_VM> itemList;
    public List<DeviceData_VM> ItemList
    {
        get { return itemList; }
        set
        {
            itemList= value;
            NotifyPropertyChanged("ItemList");
        }
    }
     TextReader readStream = new StreamReader("output.xml");
     ItemList= (List<DeviceData_VM>)serialiser.Deserialize(readStream);

但是“PropertyName1”和“PropertyValue1”是从其他变量中获取的。

   void GetFileData()
        {
           string[] readText = File.ReadAllLines(@"D:\WriteLines.txt");
                List<DeviceData_VM>  tempeDataLst = new List<DeviceData_VM>();
                for (var i = 0; i < readText.Length - 1; i++)
                {
                    if (readText[i][0] == ';' || readText[i][0] == '/' || readText[i][0] == '@' || readText[i][0] == '#' || readText[i][0] != 'A')
                        continue;
                    var cols = readText[i].Split('\t');
                    DeviceData_VM fileData = new DeviceData_VM();
                    fileData.PmName = cols[1];
                    fileData.PmValue = cols[2];                      
                    fileData.PmUnit = cols[4];
                    tempeDataLst.Add(fileData);
                   TabInfo tabCompInfo = new TabInfo();
                   foreach (var tabItem in LstTabInfo)
                    {
                        foreach (var devItem in tabItem.LstPmData1)
                        {
                            if(devItem.PmName == fileData.PmName)
                            {
                                if(fileData != null){

                                    tabCompInfo.RightData = fileData;                                       
                                    break;
                                }                                 
                            } 
                        } 
                   }
               }
           }

所以我在“RightData”中有 ProperName1 和 PropertyValue1。如何将这些绑定到数据网格列?提前谢谢你。

【问题讨论】:

  • 创建一个将所有列组合在同一个项目中的类型

标签: c# wpf mvvm


【解决方案1】:

您是否尝试将您希望绑定的额外属性添加到您的 DeviceData_VM 模型中?

之后,从您希望的任何数据源将您的值添加到每个 DeviceData_VM。

将每个项目添加到您的 ItemList 中,您的绑定应该会按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2013-07-27
    • 2015-12-29
    相关资源
    最近更新 更多