如何访问绑定到用户控件的项控件的项?



(我很难清楚地问我的问题,如果不清楚,很抱歉。(

我想访问绑定到UserControl的ItemsControl的项,但我不知道它绑定到什么属性

<ItemsControl ItemsSource="{Binding Path=Widgets}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:WidgetView/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

其中"Widgets"是以下类实例的集合:

public class Widget
{
public int Data { get; set; }
public int OtherData { get; set; }
public Widget() {}
}

"WidgetView"是一个UserControl:

<UserControl x:Class="TestApp.WidgetView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestApp">
<WrapPanel>
<TextBlock Text="{Binding Path=Data, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="Set Other Data" Click="btn_clicked"/>
</WrapPanel>
</UserControl>

后面有代码:

public partial class WidgetView : UserControl
{
public WidgetView() {}
private void btn_clicked(object sender, RoutedEventArgs e)
{
(???).OtherData = 42;
}
}

在后面的代码中,我将如何访问ItemsControl中"WidgetView"绑定到的"Widget"实例?

正如Crowcoder所说;您通常会通过ICommand执行此操作,而不涉及代码隐藏。

话虽如此;对于需要此方法的少数几次,您可以通过DataContext访问它。这是一个物体,所以你需要投射:

private void btn_clicked(object sender, RoutedEventArgs e)
{
var widget = (Widget)DataContext; //Or a safer cast!
widget.OtherData = 42;
}

最新更新