der Titel mag etwas irreführend wirken, deshalb beschreibe ich das Problem im folgenden heir etwas genauer, praxisbezogener.
Wie bekannt, gibt es unter der WPF kein BindingNavigator Tool mehr,
also habe ich versucht, mir ein eigenes UserControl, welches die Funktionalitäten eines BindignNavigators in Bezug auf ein attached DataGrid bereitstellt, zu schreiben.
Dabei habe ich folgendes Versucht.
Ich übergebe via Propertie ein DataGrid an mein BindingNavigator Control.
Die UI des Bindingnavigators ist an dieses Propertie gebunden. In meinem Fall habe ich nun begonnen die ANzahl der Items auszulesen.
Das funktioniert auch prinzipiell, doch Wenn sich die Anzahl der Items im orginalen DataGrid ändern, so reagiert die GUI auf diese Änderung nicht.
Dabei handelt es sich doch nur um eine Referenz die ich übergebe ?
Warum bekommt die BindingNavigator Klasse die Änderung nicht mit ?
Hier die Sourcen.
Die BindingNavigator Klasse, des UserControls.
/// <summary>
/// Interaction logic for BindingNavigator.xaml
/// </summary>
public partial class BindingNavigator : UserControl, INotifyPropertyChanged
{
/// <summary>
/// reference to the dataGrid to work on
/// </summary>
private DataGrid dataGrid;
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Constructor
/// </summary>
public BindingNavigator()
{
InitializeComponent();
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public DataGrid DataGrid
{
set
{
this.dataGrid = value;
OnPropertyChanged("DataGrid");
}
get
{
return this.dataGrid;
}
}
}
Die dazugehörige XAML (nicht komplett, jeweils auf meines erachtens wichtige beschränkt)
<UserControl x:Class="UserControls.BindingNavigator"
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" Width="300" Height="50">
<Grid x:Name="rootGrid">
<Label x:Name="lblItemsCount" Content="{Binding Path=DataGrid.Items.Count, Mode=OneWay}"></Label>
</Grid>
</UserControl>
In einer ganz normalen WPF Anwedung platziere ich also meinen BindingNavigator und setzte die DataGrid propertie:
private void dataGrid1_Loaded(object sender, RoutedEventArgs e)
{
DataGrid dg = sender as DataGrid;
dg.Items.Add("entry");
dg.Items.Add("entry");
this.bindingNavigator1.DataGrid = dg;
}
/// <summary>
/// add addional entrys to test if the binding navigator update the item counter
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, RoutedEventArgs e)
{
this.dataGrid1.Items.Add("entry");
this.dataGrid1.Items.Add("entry");
}
Könnt ihr mir helfen ?
Vielen dank schon einmal :)
Birne