i try to use generate MVVM pattern using Silverlight ListView. But if i bind data my silverlight control no data visualize. also no error return. i see empty gridview.
MyData.cs
public class MyData
{
public int ID { get; set; }
public string Name { get; set; }
public string Price { get; set; }
public string Author { get; set; }
public string Catalog { get; set; }
}
BookViewer.xaml
<UserControl x:Class="wpf.MVVM.Project.View.BookViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="500" Width="700">
<Grid>
<StackPanel>
<ListView Margin="8" Height="400" Width="650" ItemsSource="{Binding Path=MyData}">
<ListView.View>
<GridView >
<GridViewColumn Header="ID" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ID}" TextAlignment="Right" Width="40"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" Width="100"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Price}" Header="Price" Width="100"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Author}" Header="Author" Width="100"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Catalog}" Header="Catalog" Width="100"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</Grid>
</UserControl>
MyDataViewModel.cs
public class MyDataViewModel
{
// public ObservableCollection<MyData> myData { get; set; }
public List<MyData> GetData()
{
List<MyData> myDataList = new List<MyData>();
myDataList.Add(new MyData() { ID = 1, Name = "yusuf karatoprak", Author = "Mike Gold", Price = "6.7 TL", Catalog = "IT" });
myDataList.Add(new MyData() { ID = 2, Name = "yusuf karatoprak", Author = "Scott Gunitella", Price = "9.7 TL", Catalog = "IT" });
myDataList.Add(new MyData() { ID = 3, Name = "yusuf karatoprak", Author = "David Hayden", Price = "11.7 TL", Catalog = "IT" });
if (myDataList.Count > 0)
{
return myDataList;
}
else
return null;
}
}
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MyDataViewModel myDataCtx = new MyDataViewModel();
MyDataDataView.DataContext = myDataCtx.GetData();
}
}
<Window x:Class="wpf.MVVM.Project.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="1000" Width="900"
xmlns:views="clr-namespace:wpf.MVVM.Project.View" Loaded="Window_Loaded">
<Grid>
<views:BookViewer x:Name="MyDataDataView" Margin="0,0,0,0"></views:BookViewer>
</Grid>
</Window>
i writed these codes but no data i can see.Look below:
As far as I can see you are assigning the list of items directly as your data context therefore your path should just be:
ItemsSource="{Binding}"
There is no property "MyData" on the list class, this is the datatype which does not need to be specified in the binding as the WPF framework will use reflection to search for all of the properties on MyData
You assign the list as DataContext but the binding for ItemsSource in your listview expects a property named MyData
.
Either you set the datacontext to the viewmodel and expose a MyData property containing the list or you change your ItemsSource binding to just ItemsSource="{Binding}"
.
EDIT: Ok, after your latest edit it still seems you have a mismatch between property name and binding. You bind to MyData
but the property is called myData
. (notice case difference)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With