Hello,
when I run following code in a window the binding just works normally, But when I do the same thing but make it a usercontrol it stops working.
I've tried so many things but I'm very very new to WPF and in need of help. (now the code differs between the usercontrol and the window because i'm trying every possible thing I know ;-) The Window.xaml displays the desired behaviour.
Please help me :-)
window.xaml
<Window x:Class="testwpfgrid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel>
<ListView Name="lv" ItemsSource="{Binding Path=AvosEntries}" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Avos Information">
<GridViewColumn DisplayMemberBinding="{Binding Path=AvosName}" Header="Avos Name" Width="100"/>
</GridView>
</ListView.View>
</ListView>
<Button HorizontalAlignment="Right" Margin="5,5,5,5" Content="Add Row" Click="AddRow_Click" />
</StackPanel>
</Window>
window.xaml.cs
public partial class MainWindow : Window
{
public class AvosEntry
{
public string AvosName { get; set; }
}
public MainWindow()
{
AvosEntries = new ObservableCollection<AvosEntry>();
fillList();
InitializeComponent();
}
private void AddRow_Click(object sender, RoutedEventArgs e)
{
AvosEntries.Add(new AvosEntry
{
AvosName = "New Avos Entry"
});
}
private void fillList()
{
for (int i = 1; i <= 10; i++)
{
AvosEntry avosEntry = new AvosEntry();
avosEntry.AvosName = "Avos " + i;
AvosEntries.Add(avosEntry);
}
}
public ObservableCollection<AvosEntry> AvosEntries { get; private set; }
}
usercontrol.xaml
<UserControl x:Class="Genesyslab.Desktop.Modules.Extension.avos.MySample.MySampleView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<ListView Name="lv" ItemsSource="{Binding Path=AvosEntries}" Foreground="#FFEF1212" removed="#FF868686" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Avos Information">
<GridViewColumn DisplayMemberBinding="{Binding Path=AvosName}" Header="Avos Name" Width="100"/>
</GridView>
</ListView.View>
</ListView>
<Button HorizontalAlignment="Right" Margin="5,5,5,5" Content="Add Row" Click="AddRow_Click" />
</StackPanel>
</UserControl>
usercontrol.xaml.cs
public partial class MySampleView : UserControl
{
public MySampleView()
{
AvosEntries = new ObservableCollection<AvosEntry>();
fillList();
InitializeComponent();
Width = Double.NaN;
Height = Double.NaN;
lv.DataContext = AvosEntries;
}
private void AddRow_Click(object sender, RoutedEventArgs e)
{
AvosEntries.Add(new AvosEntry
{
AvosName = "New Avos Entry"
});
}
private void fillList()
{
for (int i = 1; i <= 10; i++)
{
AvosEntry avosEntry = new AvosEntry();
avosEntry.AvosName = "Avos " + i;
AvosEntries.Add(avosEntry);
}
}
public ObservableCollection<AvosEntry> AvosEntries
{
get { return (ObservableCollection<AvosEntry>)GetValue(AvosEntriesProperty); }
set { SetValue(AvosEntriesProperty, value); }
}
public static DependencyProperty AvosEntriesProperty = DependencyProperty.Register("AvosEntries",
typeof(ObservableCollection<AvosEntry>),
typeof(MySampleView),
new PropertyMetadata(new ObservableCollection<AvosEntry>()));