2014-01-20 83 views
1

可以说,我们有一个名为MyClass如何从事件参数中获取源实例?

public class MyClass 
{ 
     public bool MyProperty {get;set;} 
} 

I类连接MyClass的名单到ListView(DataContex等)。

为了让MyClass项目看起来不错,我在listView资源中定义了一个DataTemplate。

<DataTemplate DataType="x:type local:MyClass"> 

我增加了一个膨胀器在每DataTemplate中的每一行。我添加了一个事件。

<Expander IsExpanded="Expander_Expanded_Method"> 

在代码中,我有一个方法 -

private void Expander_Expanded_Method(object sender, RoutedEventArgs e) 
{ 
    // implement 
} 

我怎样才能获得MyClass的项目的instace改变它的价值myProperty的?

我曾尝试使用:

private void Expander_Expanded_Method(object sender, RoutedEventArgs e) 
{ 
    (sender as MyClass).MyProperty = something; // doesn't work :-(
    (e.Source as MyClass).MyProperty = something // doesn't work :-(
} 

我发誓,我搜索了这件事小时,我并没有发现线索......

我试过也(如B计划),以找到如何的MyClass myProperty的XAML中通过

IsExpanded={binding Path=MyProperty, Mode ="TwoWays"} 

改变一个例子,但它并没有提前

工作,要么... 谢谢

编辑

作为谢里登建议我会添加更多信息。我会尽力让它很简单:

  • 我有一个ListView UI
  • 并插入ListView的
  • 每一个MyClass的实例内内的MyClass的
  • 的MyClass的名单列表存在的MyOtherClass
  • 的MyOtherClass情况下列表中也插入ListView控件内
  • 所以 - 我们有一个ListView有2种物品,MyClass的& MyOtherClass
  • 每MyClass的内部有一个扩展(与DataTemplate中完成了...)
  • 我想,在膨胀状态(展开/ unexpand)将是当前MyClass的内部MyOtherClass项目可见/折叠

谢谢!

+0

请解释你是什么*实际*尝试做什么......当扩展器被展开时,你试图将属性更改为什么值? – Sheridan

+0

嗨。 MyClass具有同样列表视图中的项目列表。每个项目绑定到MyProperty以设置其可见性。我希望当我扩展扩展器时,项目将会崩溃。我设法做到了这一切。只需要像我提到的那样通过扩展器来设置我的属性,并且会很棒!谢谢 – galhajaj

回答

0

当问StackOverflow上的问题,这是总是一个好主意,说明你的总体目标是什么。用户经常会问一件事,但不幸的是,他们经常在试验过程中走错了路,实际上并没有提出正确的问题。如果你只是想从Expander.IsExpanded财产到您的收藏的Visiblity属性数据绑定,那么你可以尝试这样的事:

<DataTemplate DataType="{x:Type local:MyClass}"> 
    <Expander Name="Expander"> 
     <ListBox ItemsSource="{Binding YourCollection}"> 
      <ListBox.Style> 
       <Style> 
        <Setter Property="ListBox.Visibility" Value="Visible" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsExpanded, 
ElementName=Expander}" Value="True"> 
          <Setter Property="ListBox.Visibility" Value="Collapsed" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </ListBox.Style> 
     </ListBox> 
    </Expander> 
</DataTemplate> 
+0

你好,感谢回复 - 我添加了一个编辑,由于你的建议。由于我写了什么,你的答案仍然相关? tnx – galhajaj

+0

是的,它仍然是相关的......你尝试过吗? – Sheridan

+0

很棒tnx,我正在尝试它。对于延迟感到抱歉,我只是在一台计算机上询问并运行其他程序...另一台计算机上没有互联网。 – galhajaj

0

将一个布尔属性IsExpanded添加到MyClass,将扩展器的IsExpanded属性绑定到该属性,MyClass应该实现INotifyPropertyChanged(如果没有)。

public class MyClass 
{ 
     public bool MyProperty {get;set;} 
     public bool IsExpanded {get;set;} 
     public MyClass() 
     { 
      PropertyChanged += (s,e) => 
      { 
       if (e.PropertyName == "IsExpanded") 
        // change properties 
      } 
     } 
} 

<Expander IsExpanded="{Binding IsExpanded}"> 
+0

试过了 - 不起作用。我做了MyClass:INotifyPropertyChanged并创建了PropertyChanged的公共事件 – galhajaj

0

我会确保您的DataTemplate中正确应用到ListView的ItemTemplate。

<ListView ItemsSource="{Binding MyItems}"> 
    <ListView.ItemTemplate> 
     <DataTemplate DataType="{x:Type MyClass}"> 
      <Expander IsExpanded="{Binding MyProperty, Mode=TwoWay}"> 
       <TextBlock>MyClass instance</TextBlock> 
      </Expander> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

tnx老兄我会检查它 – galhajaj

+0

不起作用:-(tnx反正 – galhajaj