XAML構文にいくつか問題がありますが、私が間違っていることを突き止めることはできません。XAML ListViewバインド
私は、ListViewコントロールを備えた単純なウィンドウと、ObservableColletionアイテムを持つ単純なViewModelを持っています。
WindowのDataContextは正しく設定されていますが、問題はListViewのItemsSourceプロパティにあります。アプリケーションをデバッグすると、ListViewにDataContext権限があり、DataContextにItemsがリストされていることがわかります。
しかし、プロパティItemsSourceはNULLです。これをコード内に設定すると、うまく機能します。
私は答えを探しましたが、見つけられませんでした。いくつかの投稿には同じ問題があるようですが、それは常にdatacontextでした。
ここに私のコードです。 WPFに結合
XAML
<Window x:Class="XAMLExamples.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:XAMLExamples"
xmlns:vm="clr-namespace:XAMLExamples.ViewModels"
mc:Ignorable="d"
Title="Ejemplos XAML" Height="350" Width="525" Background="#FF38551F" WindowStyle="ToolWindow"
>
<Window.DataContext>
<vm:TractoViewModel/>
</Window.DataContext>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto">
</RowDefinition>
</Grid.RowDefinitions>
<ListView ItemsSource="{Binding Path=listaAreas}" Grid.Column="0" x:Name="ListAreas">
<ListView.View>
<GridView>
<GridViewColumn Header="Area" Width="120" DisplayMemberBinding="{Binding Area}"/>
<GridViewColumn Header="Contenedores" Width="120" DisplayMemberBinding="{Binding Contenedores}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
C#
namespace XAMLExamples.ViewModels
{
public class TractoViewModel
{
public ObservableCollection<TractoModel> listaAreas = new ObservableCollection<TractoModel>();
public TractoViewModel()
{
for (int i = 0; i < 10; i++)
{
listaAreas.Add(
new TractoModel { Area= string.Format("Area {0}",i), Contenedores=i}
);
}
return;
}
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// With the following line everything is right
// this.ListAreas.ItemsSource = new XAMLExamples.ViewModels.TractoViewModel().listaAreas;
// Without the above line ItemsSource is null, even when the DataContext is right
var iSource = ListAreas.ItemsSource;
if (iSource == null) return;
}
}
:
広く受け入れられているC#の命名規則によると、プロパティ名も大文字で始める必要があります。それは 'how-to-bind'だけでなく' what-to-bind'についても同様です。 – C4u
mainwindowであなたのdatacontextを試すことができませんhits.DataContext = new TractoViewModel(); – SeeuD1