UserControl参数

时间:2014-06-30 13:37:04

标签: c# xaml user-controls windows-phone-8.1 win-universal-app

我正在创建一个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中用于更改图像源的按钮的单击事件。

2 个答案:

答案 0 :(得分:1)

ItemsControl的ItemTemplate中元素的默认继承DataContext已经引用了ItemsControl的ItemsItemsSource集合中的特定项。因此,没有必要明确设置它。

从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 .. 
}