2

SQL データベースをプログラムの変数に読み込む単純な (と思う) アプリがあり、XAML で定義されたグリッドビューを読み込んだデータで更新する必要があります。私は .NET 3.5 のコードに制約されています。XAML、MS .NET ヘルプ、および Web 上の他の場所に関する本で行ったすべての検索では、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>
4

1 に答える 1

0

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 部分を明確に分離する必要があります。

于 2013-03-14T16:04:28.010 に答える