1

カスタム クラスの observablecollection を単純なグリッドビューにバインドしようとしています。

これはグリッドビュー テンプレートです。

<ListView Name="TestGrid" Grid.Row="1" Margin="0,10,0,0" ItemsSource="{Binding Path=testlist}">
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Path=AlertType}" Header="Alert" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Target}" Header="Target" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Message}" Header="Message" />
        </GridView>
    </ListView>

これは背後にあるコードです:

public ObservableCollection<TestClass> testlist {get; set;}

public MainWindow()
 {
        InitializeComponent();

        testlist = new ObservableCollection<TestClass>();
        testlist.Add(new TestClass("Type1","Target1","Message1"));
        testlist.Add(new TestClass("Type2", "Target2", "Message2"));
 }

public class TestClass
{
    public string AlertType { get; set; }
    public string Target { get; set; }
    public string Message { get; set; }

    public TestClass(string a, string t, string m)
    {
        AlertType = a;
        Target = t;
        Message = m;
    }
}

今、私はインターネットで見つけたサンプルを正確にフォローしています。残念ながら、グリッドビューで得られる唯一の結果は、 「System.Windows.Controls.Columns.Count:3」という次のメッセージを表示する一意の行です。

ここで何が欠けていますか?

4

3 に答える 3

2

ListView に View プロパティがありません。

<ListView Name="TestGrid" Grid.Row="1" Margin="0,10,0,0" ItemsSource="{Binding Path=testlist}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Path=AlertType}" Header="Alert" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Target}" Header="Target" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Message}" Header="Message" />
        </GridView>
    </ListView.View>    
</ListView>
于 2013-10-24T09:07:45.043 に答える
2

xaml とコード ビハインドを次のように更新します。

          <ListView Name="TestGrid" Grid.Row="1" Margin="0,10,0,0" ItemsSource="{Binding Path=testlist}">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=AlertType}" Header="Alert" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Target}" Header="Target" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Message}" Header="Message" />
                </GridView>
            </ListView.View>
        </ListView>

コードビハインド

public MainWindow()
{
    InitializeComponent();

    testlist = new ObservableCollection<TestClass>();
    testlist.Add(new TestClass("Type1","Target1","Message1"));
    testlist.Add(new TestClass("Type2", "Target2", "Message2"));
    DataContext = this;

}

于 2013-10-24T09:04:59.657 に答える
0

ウィンドウのviewModelを作成して、ウィンドウのデータコンテキストとして設定してみてください。コードビハインドを更新します。

 public partial class MainWindow : Window
{
    private ExampleViewModel m_ViewModel;      
    public MainWindow()
    {
        InitializeComponent();
        m_ViewModel = new ExampleViewModel();
        DataContext = m_ViewModel;
    }
}


public class ExampleViewModel : INotifyPropertyChanged
{
    private ObservableCollection<TestClass> m_testlist;
    public ExampleViewModel()
    {
        m_testlist = new ObservableCollection<TestClass>();
        m_testlist.Add(new TestClass("Type1", "Target1", "Message1"));
        m_testlist.Add(new TestClass("Type2", "Target2", "Message2"));
    }

    public ObservableCollection<TestClass> testlist
    {
        get
        {
            return m_testlist;
        }
        set
        {
            if (m_testlist != value)
            {
                m_testlist = value;
                OnPropertyChanged("testlist");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

    }
}

public class TestClass
{
    public string AlertType { get; set; }
    public string Target { get; set; }
    public string Message { get; set; }

    public TestClass(string a, string t, string m)
    {
        AlertType = a;
        Target = t;
        Message = m;
    }
}
于 2013-10-24T09:17:33.073 に答える