0

私はWPFを学んでおり、ListViewにフォルダーのリスト(ListViewグループとして)と各フォルダーのファイル(ListViewアイテムとして)を入力しようとしています。

WPF/MVVM クイック スタート チュートリアルを使用して、次のクラスを作成しました (ビジネスは削除されました)。

public class PatchGen
{
    public PatchGen() { }

    private string _folderName;
    private Dictionary<string, string> _filesInfo = new Dictionary<string, string>();

    public string FolderName
    {
        get { return _folderName; }
        set { _folderName= value; }
    }
    public Dictionary<string, string> FilesInfo
    {
        get { return _filesInfo; }
        set { _filesInfo = value; }
    }
}

およびViewModel:

public class PatchGenViewModel : ObservableObject
{
    public PatchGenViewModel()
    {
    }

    List<PatchGen> _folderList = new List<PatchGen>();

    public List<PatchGen> Folders
    {
        get
        {
            return _folderList;
        }
        set { }
    }

    void AddFilesExecute()
    {
        //business here
    }

    bool CanAddFilesExecute()
    {
        return true;
    }

    public ICommand AddFiles { get { return new RelayCommand(AddFilesExecute, CanAddFilesExecute); } }

xaml セクションには、 と が含まれDataContextますCollectionViewSource

<Window.DataContext>
  <local:PatchGenViewModel></local:PatchGenViewModel>
</Window.DataContext>
<Window.Resources>
  <CollectionViewSource x:Key='groups'
                        Source="{Binding Path=Folders}">
    <CollectionViewSource.GroupDescriptions>
      <PropertyGroupDescription PropertyName="FolderName" />
    </CollectionViewSource.GroupDescriptions>
  </CollectionViewSource>
</Window.Resources>

そしてListView:

<ListView Grid.Row="1"
          HorizontalAlignment="Stretch"
          Name="lstViewServices"
          ItemsSource='{Binding Source={StaticResource groups}}'>
  <ListView.View>
    <GridView>
      <GridViewColumn Header="File Name"
                      DisplayMemberBinding="{Binding Path=??? }"
                      Width="100" />
      <GridViewColumn Header="File Path"
                      DisplayMemberBinding="{Binding Path=??? }"
                      Width="Auto" />
    </GridView>
  </ListView.View>
</ListView>

ListView グループにフォルダ名が表示されません。?

(Dictionnary < string,string > ) 情報を表すFile Nameとを表示するにはどうすればよいですか?File PathFilesInfo

Xaml ファイルの背後にあるコードなしで、XAML および ViewModel クラスを介してこれを行う方法はありますか?

4

1 に答える 1

0

ファイル名をファイルのフォルダ名プロパティにバインドするだけです。

ファイルパスについては、FilesInfoプロパティにバインドする必要があります。なぜ辞書なのですか?なぜここで辞書を使っているのかわからなかったと思いますか?何かが足りないかもしれませんが、辞書を削除して独自の小さなオブジェクトを作成する必要があります。

public class FileInfo
{
    public string FileName {get;set;}
    public string FilePath {get;set;}
}

次に、もちろん、Dictionaryの代わりにそれを使用するようにPatchGenオブジェクトを変更します。

たぶん、あなたがそれをどのように見せたいかのスクリーンショットが役立つでしょう。ただし、XAMLを見ると、FolderNameを配置する場所がありません。FileNameとFilePathの場所しかありません。

<ListView Grid.Row="1"
          HorizontalAlignment="Stretch"
          Name="lstViewServices"
          ItemsSource='{Binding Source={StaticResource groups}}'>
  <ListView.View>
    <GridView>
      <GridViewColumn Header="File Name"
                      DisplayMemberBinding="{Binding Path=FileName }"
                      Width="100" />
      <GridViewColumn Header="File Path"
                      DisplayMemberBinding="{Binding Path=FilePath}"
                      Width="Auto" />
    </GridView>
  </ListView.View>
</ListView>

したがって、FolderNameの場所を追加する必要があります。2つのリストがあるようです。フォルダリストと各フォルダのファイルリストです。ただし、ビューには1つのレベルしかありません。

これは2つのレベルがある例です。

<ItemsControl ItemsSource='{Binding Folders}'>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <Label Content="{Binding FolderName}" />
        <ListView Grid.Row="1"
                  HorizontalAlignment="Stretch"
                  Name="lstViewServices"
                  ItemsSource="FileInfo">
          <ListView.View>
            <GridView>
              <GridViewColumn Header="File Name"
                              DisplayMemberBinding="{Binding Path=FolderName}"
                              Width="100" />
              <GridViewColumn Header="File Path"
                              DisplayMemberBinding="{Binding Path=FolderName }"
                              Width="Auto" />
            </GridView>
          </ListView.View>
        </ListView>
      </StackPanel>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
于 2012-11-30T18:14:02.773 に答える