Hallöle und einen schönen sonnigen Freitag liebe Gemeinde.
Ich befürchte daß mir mal wieder das Verständnis fehlt. Ich habe eine WPF - Anwendung erstellt, dort im Hauptfenster eine ListView erstellt mit einem Item - Template auf mein Haupt - ViewModel. Wenn ich das Projekt nun starte, behauptet mein VS2019:
Datenkontext: Ziel: Zieltyp Beschreibung
String "ListView.ItemSource, Name="lstNewBase" IENumerable Die Eigenschaft "Bases" wurde im Objekt vom Typ "String" nicht gefunden.
Interessanterweise zeigt das Fenster trotzdem alles an, was ich angezeigt bekommen möchte.
<ListView x:Name="lstNewTool" ItemsSource="{Binding Tools}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single" Margin="5" Width="400">
<ListView.ItemTemplate>
<DataTemplate>
<views:ToolChangeView DataContext="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Und hier das dazugehörige ViewModel
public class ToolViewModel :ViewModelBase
{
private int _toolnumber;
private string _toolname;
private RobFrame _tooldata;
private bool _isused;
public bool IsUsed
{
get
{
return _isused;
}
set
{
_isused = value;
RaisePropertyChanged(nameof(IsUsed));
}
}
public int ToolNumber
{
get
{
return _toolnumber;
}
set
{
_toolnumber = value;
RaisePropertyChanged(nameof(ToolNumber));
}
}
public string ToolName
{
get
{
return _toolname;
}
set
{
_toolname = value;
RaisePropertyChanged(nameof(ToolName));
}
}
public RobFrame ToolData
{
get
{
return _tooldata;
}
set
{
_tooldata = value;
RaisePropertyChanged(nameof(ToolData));
}
}
public ToolViewModel()
{
ToolNumber = 0;
IsUsed = false;
ToolName = "";
ToolData = new RobFrame();
}
}
Da es gerade in Richtung Wochenende geht, wünsche ich Euch allen ein schönes solches. Herzliche Grüße aus dem sonnigen Süden
2 stupid 4 chess? No way.
2 stupid 4 C#? It seems so X(
Welchen Typ hat denn die Property Tools? Die zeigst du nirgendwo, dass ist doch die, die abgemartert ist, diese müsste etwas sein,dass IEnumerable implementiert.
Ich vermute mal, dass die Bindungen dadurch zustande kommen, weil Du den DataContext vom DataTemplate direkt auf das ToolViewModel bindest. Wie Papst schon angemerkt hat, fehlt das Tools-Property im ViewModel.
In Deinem ViewModel musst Du ein Property Tools vom Typ List<ToolViewModel> definieren. Du brauchst in dem Fall keine ObservableCollection<ToolViewModel>, da sich die Anzahl der Tools nicht ändert.
Das DataTemplate ToolChangeView änderst Du wie folgt.
<DataTemplate DataType="{x:Type local:ToolViewModel}">
<views:ToolChangeView />
</DataTemplate>
Du solltest auch überlegen, ob Du das ToolViewModel nicht verallgemeinern kannst. Tooldate und Basedaten haben beim KUKA die gleiche Struktur.
Hier nochmals als Code:
<ListView x:Name="lstNewTool"
ItemsSource="{Binding Tools}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionMode="Single"
Margin="5"
Width="400">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type local:ToolViewModel}">
<StackPanel>
<TextBlock Text="{Binding ToolName}" />
<TextBlock Text="{Binding ToolNumber}" />
<TextBlock Text="{Binding ToolData.X}" />
<TextBlock Text="{Binding ToolData.Y}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
public class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<ToolViewModel> Tools { get; set; }
public MainWindowViewModel()
{
Tools = new ObservableCollection<ToolViewModel>
{
new ToolViewModel()
};
}
}
Hallo Caveman
Es hat eine Weile gedauert, bis ich wieder darüber gestolpert bin. Dein Tip hat 100%ig funktioniert. Herzlichen Dank dafür.
2 stupid 4 chess? No way.
2 stupid 4 C#? It seems so X(