1

私はこれを一日中試してきましたが、運がありませんでした。UserControlを表示することはできますが、XAMLで列を設定しても、列が表示されない理由を理解できません。また、フォームが空白で開いているため、データが表示されているかどうかもわかりません。

これは、別のプログラムから呼び出しているクラスライブラリの一部です。ただし、常に空白のフォームが表示され、何も更新されていません。

以下は私のUserControlコードです。

public partial class DisplayData : UserControl
{
    ObservableCollection<Data> _DataCollection = new ObservableCollection<Data>();

    public DisplayData()
    {
        InitializeComponent();

        Window window = new Window();
        window.Content = new UserControl();
        window.Show();
    }

    public void AddDataToList(int ID, string Name)
    {
        _DataCollection.Add(new Data
        {
            StudentID = ID,
            StudentName = Name
        });
    }

    public ObservableCollection<Data> DataCollection { get { return _DataCollection; } }
}

public struct Data
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
}

以下は私がそれを呼んでいる方法です:

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        DisplayData displayData = new DisplayData();
        displayData.AddDataToList(2, "John");
        System.Threading.Thread.Sleep(5000);
    }
}

そしてxaml:

<UserControl x:Class="ConsoleApplication1.DisplayData"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="210">
    <StackPanel>
        <ListView ItemsSource="{Binding DataCollection}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="100" Header="ID" DisplayMemberBinding="{Binding StudentID}"  />
                    <GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding StudentName}" />
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>
</UserControl>

編集私もそれを追加したいと思います:

  1. 正しいサイズが表示されません
  2. フォームの列見出しも表示されません
  3. データの更新もありません。

また、これが役立つかどうかはわかりませんが、これをWPFUserControlとして既存のプロジェクトに追加しました。

4

5 に答える 5

1

すべてのコードを確認しないと、これが問題(または唯一の問題)であるかどうかはわかりませんが、DataContextプロパティをバインドする必要があります。リストビューは、列がいくつかのプロパティにバインドされていることを知っていますが、それらのプロパティがどこから来ているのか(クラス)は知りません。

また、INotifyPropertyChanged(このプロジェクトではないかもしれませんが、一般的には)も調べてください。説明するのは少しなので、それが何をするのかを調べることができますが、それはWPFバインディングの大部分です。

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext.aspx

最善の策は、バインディングとリストビューの設定方法に関する優れたチュートリアルを見つけることです。いくつかの背景のノウハウがなければ、本当に理解するのは難しいです。とにかく、それは私のためでした。これがお役に立てば幸いです。

于 2012-05-17T19:23:45.877 に答える
0

私はXAMLプロではありませんが、ドキュメントには異なるバインディングテキストがあります:http://msdn.microsoft.com/en-us/library/ms750972.aspx

試す

DisplayMemberBinding="{Binding Path=StudentID}"
于 2012-05-17T18:49:54.193 に答える
0

変えてみましたか

public struct Data 

の中へ

public class Data

私も今日一日中ListViewに取り組んでいますが、それについて言えることが1つあるとすれば、それは気難しいということです。構造体を取り入れたくないだけかもしれません。

編集:これが私の作業リストビューです

<ListView Grid.Column="2" HorizontalAlignment="Stretch" Margin="0" Name="listTableItem" VerticalAlignment="Stretch">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name"
                DisplayMemberBinding="{Binding Name}"
                Width="75"
            />
            <GridViewColumn Header="Value"
                DisplayMemberBinding="{Binding Value}"
                Width="500"
            />
        </GridView>
    </ListView.View>
</ListView>
于 2012-05-17T19:04:52.013 に答える
0

DataContextを分離コードにバインドする必要があると思います。下記参照。

<UserControl x:Class="ConsoleApplication1.DisplayData"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         DataContext="{Binding RelativeSource={RelativeSource Self}}" 
         mc:Ignorable="d" 
         d:DesignHeight="100" d:DesignWidth="210">
于 2012-05-17T19:30:47.273 に答える
0

他のいくつかのポスターが指摘したように、DataContextを設定する必要があります(figabytesの回答のように):

<UserControl x:Class="ConsoleApplication1.DisplayData"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         DataContext="{Binding RelativeSource={RelativeSource Self}}" 
         mc:Ignorable="d" 
         d:DesignHeight="100" d:DesignWidth="210">

もう1つの問題は、コントロールを表示しようとしていないことです。次のコードは、ウィンドウオブジェクトを作成し、作成したコントロールをコンテンツとして配置します。その後、Show()またはShowDialog()を呼び出すだけで、作業の結果が得られます。

[STAThread]
static void Main(string[] args)
{
        DisplayData displayData = new DisplayData();
        displayData.AddDataToList(2, "John");

        Window window = new Window();
        window.Content = displayData;

        window.ShowDialog();
}
于 2012-05-18T13:09:42.067 に答える