gpt4 book ai didi

c# - 在 .NET 3.5 中从 C# 更新 XAML GridView

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:22 25 4
gpt4 key购买 nike

我有一个简单的(我认为)应用程序,它将 SQL 数据库读取到我程序中的变量中,然后我需要用我读取的数据更新 XAML 中定义的 gridview。我不得不为 .NET 3.5 编写代码。我在有关 XAML 的书籍、MS .NET 帮助和 Web 上的其他地方进行的所有搜索显示了从 ASP.NET 执行此操作的无数示例,但没有一个来自 C#-XAML 组合。我发现在 XAML++ 中做简单的事情比在 Winforms 中做同样的事情更加困难和复杂,我就是不明白这一点。特别是,数据绑定(bind)在我看来是一种魔法。有人可以看看我的 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>

最佳答案

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

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 部分之间有一个明确的解耦。

关于c# - 在 .NET 3.5 中从 C# 更新 XAML GridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com