我正在创建一个Windows通用应用程序。我有一个列表框,其中包含我自己定义的类对象的itemsource。在列表框的itemtemplate中,我有一个UserControl。此UserControl包含几个包含图像的按钮。单击该按钮时,图像应更改,并应更改设置。对于更改设置,我需要绑定到itemtemplate的对象,usercontrol是其中的一部分。
如何获取作为此UserControl实例源的特定项目?
我读过这个: Windows Phone 8 usercontrol imagebutton with different images for different states
但这并不能解释如何获取自定义类的对象。仅限ui元素的属性。
编辑:由于我不允许向您展示实际代码(合同相关业务),我为您提供了一些示例代码。
在usercontrol中单击事件:
private void Important_Click(object sender, RoutedEventArgs e)
{
CustomClass customObject = ((sender as Button).DataContext as CustomClass);
if (customObject != null)
{
Print.Debug("customObject : " + customObject .ToString());
}
else
{
Print.Debug("customObject is null");
}
Print.Debug("Important_Click: " + e);
var resourceLoader = ResourceLoader.GetForCurrentView();
if (isImportant)
{
Important.Source = new BitmapImage(new Uri(resourceLoader.GetString("Important/Source")));
isImportant = false;
}
else
{
Important.Source = new BitmapImage(new Uri(resourceLoader.GetString("Important_enabled")));
isImportant = true;
}
hasDoneWork = true;
}
调用usercontrol的Xaml:
<DataTemplate x:Key="Template">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Name="TextBlockWithSource" TextWrapping="NoWrap" Text="{Binding Path=Source_Text}" Foreground="Black" FontSize="15" />
<home:OptionButtons Name="ChatOptionsButton" Grid.Column="1" DataContext="{Binding Path=Source}" > <!-- trying to bind the object, not a variable within the object -->
</home:OptionButtons >
</Grid>
</DataTemplate>
编辑2:忘了解释代码。
在上面的代码片段中,OptionButtons是UserControl。 DataTemplate是ListBox的ItemTemplate,其ItemSource属性绑定到CustomClass对象的集合。 Important_Click事件是OptionButtons UserControl中用于更改图像源的按钮的单击事件。
答案 0 :(得分:1)
ItemsControl的ItemTemplate中元素的默认继承DataContext
已经引用了ItemsControl的Items
或ItemsSource
集合中的特定项。因此,没有必要明确设置它。
从XAML中删除DataContext
绑定:
<home:OptionButtons Name="ChatOptionsButton" Grid.Column="1" />
答案 1 :(得分:0)
尝试
处理UserControl中按钮的Click事件
您可以在该用户控件中获取项绑定。
private void OnClick(object sender, RoutedEventArgs e)
{
var item = ((sender as Button).DataContext) as yourCustomClass;
if(item != null)
\\ do your stuff ..
}