在.net 3.5中从c#中更新XAML GridView

本文关键字:更新 XAML GridView 中从 net | 更新日期: 2023-09-27 18:03:48

我有一个简单的(我认为)应用程序,读取SQL数据库到我的程序中的变量,然后我需要更新在XAML中定义的gridview与我读取的数据。我只能为。net 3.5编写代码。我在关于XAML、MS . net帮助和其他网站的书籍中所做的所有搜索都显示了从ASP中实现这一点的无数示例。NET,但没有c# -XAML组合。我发现在XAML ++中做简单的事情比在Winforms中做同样的事情要困难和复杂得多,我就是不明白这一点。特别是,数据绑定对我来说似乎是一种魔法。有人可以看看我的XAML,并告诉我我需要做什么或改变填充这个控件从我的c#代码背后?

这是我的XAML:
<Window x:Class="UCCResourceManager.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="UCC Resource Mangler" Height="350" Width="700">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="250"/>
      <RowDefinition />
    </Grid.RowDefinitions>
    <ListView Name="grdResource"
              ItemsSource="{Binding}"
              Grid.Row="0">
      <ListView.View>
        <GridView AllowsColumnReorder="false"
              ColumnHeaderToolTip="UCC Resource Table">
          <GridViewColumn DisplayMemberBinding="{Binding Path=ID}"
                          Header="ID"
                          Width="50"/>
          <GridViewColumn DisplayMemberBinding="{Binding Path=LocationID}"
                          Header="LocationID"
                          Width="75"/>
          <GridViewColumn DisplayMemberBinding="{Binding Path=Type}"
                          Header="Type"
                          Width="50"/>
          <GridViewColumn DisplayMemberBinding="{Binding Path=Name}"
                          Header="Name"
                          Width="200"/>
          <GridViewColumn DisplayMemberBinding="{Binding Path=Enabled}"
                          Header="Enabled"
                          Width="50"/>
          <GridViewColumn DisplayMemberBinding="{Binding Path=Flags}"
                          Header="Flags"
                          Width="50"/>
        </GridView>
      </ListView.View>
    </ListView>
    <Button Name="btnOK"
            Content="OK"
            Grid.Row="1"
            Width="100"
            Height="20
            " Click="btnOK_Click" />
  </Grid>
</Window>

在.net 3.5中从c#中更新XAML GridView

我建议使用MVVM。这里你有一个ViewModel类,你可以在其中绑定你的属性。

public class MainWindowViewModel
{
    #region Constructor
    public MainWindowViewModel()
    {
        YourGridList = new ObservableCollection<GridElement>();
        var el = new GridElement
                     {
                         Element1 = "element 1", 
                         Element2 = "element 2", 
                         Element3 = "element 3"
                     };
        YourGridList.Add(el);
    }
    #endregion
    #region Private members
    private ObservableCollection<GridElement> _yourGridList;
    private ICommand _addElementCommand;
    #endregion
    #region Public properties
    public ObservableCollection<GridElement> YourGridList
    {
        get
        {
            return _yourGridList;
        }
        set
        {
            _yourGridList = value;
        }
    }
    #endregion
    #region Commands
    public ICommand AddElementCommand
    {
        get { return _addElementCommand ?? (_addElementCommand = new DelegateCommand(AddElement)); }
    }
    #endregion
    #region Private Methods
    private void AddElement()
    {
        var el = new GridElement
        {
            Element1 = "NewEl1",
            Element2 = "NewEl2",
            Element3 = "NewEl3"
        };
        YourGridList.Add(el);
    }
    #endregion

然后,您可以在xaml.cs文件中使用这个类作为DataContext。

 public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainWindowViewModel();
    }

从xaml文件中,你可以从ViewModel的"YourGridList"属性中填充你的ListView ItemsSource。

<Window x:Class="WpfApplication6.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="35"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Content="Add element" Command="{Binding AddElementCommand}" Grid.Row="0"/>

        <ListView Grid.Row="1"
                  Margin="10"
                  ItemsSource="{Binding YourGridList, UpdateSourceTrigger=PropertyChanged}"
                  MaxHeight="300">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Width="Auto">
                            <GridViewColumn.Header>
                                <GridViewColumnHeader Content="Element 1" HorizontalContentAlignment="Left" />
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Element1}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Width="Auto">
                            <GridViewColumn.Header>
                                <GridViewColumnHeader Content="Element 2" HorizontalContentAlignment="Left" />
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Element2}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Width="Auto" >
                            <GridViewColumn.Header>
                                <GridViewColumnHeader Content="Element 3" HorizontalContentAlignment="Left" />
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Element3}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Grid>

这应该可以更新你的ListView,并且在代码和xaml部分之间有一个清晰的解耦。