如何访问绑定到 UserControl 的 ItemsControl 项的项?
How do I access the item of a ItemsControl's item bound to a UserControl?
(我正在努力问清楚我的问题,如果不清楚请见谅。)
我想访问绑定到 UserControl 的 ItemsControl 的项目,但我不知道它绑定到什么 属性。这是一个例子:
<ItemsControl ItemsSource="{Binding Path=Widgets}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:WidgetView/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
其中 "Widgets" 是以下 class 个实例的集合:
public class Widget
{
public int Data { get; set; }
public int OtherData { get; set; }
public Widget() {}
}
和"WidgetView"是一个用户控件:
<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;
}
}
在代码隐藏中,我将如何访问 "WidgetView" 在 ItemsControl 中绑定到的 "Widget" 实例?
正如 Crowcoder 所说;您通常会通过 ICommand
执行此操作并且不涉及代码隐藏。
话虽这么说;在少数情况下,您 需要 这种方法,您可以通过 DataContext
访问它。那是一个对象,所以你需要转换:
private void btn_clicked(object sender, RoutedEventArgs e)
{
var widget = (Widget)DataContext; //Or a safer cast!
widget.OtherData = 42;
}
(我正在努力问清楚我的问题,如果不清楚请见谅。)
我想访问绑定到 UserControl 的 ItemsControl 的项目,但我不知道它绑定到什么 属性。这是一个例子:
<ItemsControl ItemsSource="{Binding Path=Widgets}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:WidgetView/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
其中 "Widgets" 是以下 class 个实例的集合:
public class Widget
{
public int Data { get; set; }
public int OtherData { get; set; }
public Widget() {}
}
和"WidgetView"是一个用户控件:
<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;
}
}
在代码隐藏中,我将如何访问 "WidgetView" 在 ItemsControl 中绑定到的 "Widget" 实例?
正如 Crowcoder 所说;您通常会通过 ICommand
执行此操作并且不涉及代码隐藏。
话虽这么说;在少数情况下,您 需要 这种方法,您可以通过 DataContext
访问它。那是一个对象,所以你需要转换:
private void btn_clicked(object sender, RoutedEventArgs e)
{
var widget = (Widget)DataContext; //Or a safer cast!
widget.OtherData = 42;
}