我有一个ObservableCollection
和一个ListBox
,我想在它们之间进行绑定,但是在后面的代码中没有使用listBox1.DataSource/ItemsSource = ...
,我发现了很多这样的例子,但我需要仅在xaml代码中进行绑定
如果我没弄错的话,我需要先把我的名单作为财产。
private ObservableCollection<ProtectionBase> _listhelmets;
public ObservableCollection<ProtectionBase> ListHelmets
{
get { return _listhelmets; }
set { _listhelmets = value; }
}
public MainWindow()
{
InitializeComponent();
ListHelmets.Add(new Helmet(){protection=5});
ListHelmets.Add(new Helmet() { protection = 7 });
this.DataContext = _listhelmets;
}
xaml代码:
<ListBox x:Name="listhelmets" Height="215" Width="197" PreviewMouseDown="helmet_MouseDown1"
PreviewMouseLeftButtonDown="helmet_PreviewMouseLeftButtonDown"
PreviewMouseMove="helmet_PreviewMouseMove" ItemsSource="{Binding}">
<TextBlock FontWeight="Bold" FontSize="13" Background="Silver" Margin="0 0 0 10" Text="Шлемы"> </TextBlock>
<ListBoxItem >
<StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=listhelmets, Path=SelectedItem}"
MouseEnter="ChoosingHelmet1"
DragOver="helmet1_DragOver"
DragEnter="helmet_DragEnter" AllowDrop ="true"
DragLeave="helmet_DragLeave" MouseLeftButtonDown="helmet_MouseLeftButtonDown_1">
<TextBlock Text="{Binding protection, ElementName=ListHelmets[0]}" Width="124"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem >
<StackPanel Orientation="Horizontal">
<Image Source="D:..."/>
</StackPanel>
</ListBoxItem>
</ListBox>
答案 0 :(得分:0)
如果你没有使用MVVM,请在你的代码中执行此操作:
ListHelmets.Add(new ProtectionBase(){protection = 5});
ListHelmets.Add(new ProtectionBase() { protection = 7 });
listhelmets.ItemsSource = ListHelmets;
文本块文本 protection 必须是 ProtectionBase
类中的属性在xaml中这样做:
删除 ItemsSource =“{Binding}”,
从stackpanel中删除Datacontext,
删除,ElementName = ListHelmets [0]
如果您使用的是MVVM,请告诉我
答案 1 :(得分:0)
最简单的方法是使用IObservableCollection
在Xaml。
<ComboBox Text="Content File.."
IsEditable="True"
ItemsSource="{Binding MySweetCollection}"
HorizontalAlignment="Right"
/>
On Code Behind你必须有一个名为&#34; MySweetCollection&#34;的IObservableCollection。
在您的代码中,您将绑定设置为空。
答案 2 :(得分:0)
这肯定有用:
xaml:
<ListBox x:Name="listhelmets" Height="215" Width="197" ItemsSource="{Binding}">
<TextBlock FontWeight="Bold" FontSize="13" Background="Silver" Margin="0 0 0 10" Text="Шлемы"></TextBlock>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding protection}" Width="124"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
xaml.cs
listhelmets.Items.Clear();
List<ProtectionBase> Helmets = new List<ProtectionBase>();
Helmets.Add(new ProtectionBase(){ protection = 7});
Helmets.Add(new ProtectionBase() { protection = 8 });
Helmets.Add(new ProtectionBase() { protection = 9 });
listhelmets.ItemsSource = Helmets;
(我已经从xaml删除了所有事件和不必要的东西。请添加所有必要的事件)
我不明白是否需要这个文本块:
<TextBlock FontWeight="Bold" FontSize="13" Background="Silver" Margin="0 0 0 10" Text="Шлемы"></TextBlock>
我认为你应该将它放在列表框上方。你不应该把它放在ListBox
中