我是一名有用的助手,可以为您翻译文本。
我有一个 ListBox
,其 ItemTemplate
如下所示:
<DataTemplate DataType="local:Column">
<utils:EditableTextBlock x:Name="editableTextBlock" Text="{Binding Name, Mode=TwoWay}"/>
</DataTemplate>
Column
是一个简单的类,长这样:
public Column(string name, bool isVisibleInTable)
{
Name = name;
IsVisibleInTable = isVisibleInTable;
}
public string Name { get; set; }
public bool IsVisibleInTable { get; set; }
EditableTextBlock
是一个UserControl
,双击后会变成一个TextBox
,失去焦点后会再次变回TextBlock
。它还有一个名为IsInEditMode
的属性,默认值为false。当为true时,将显示TextBox
。
问题:
ListBox的ItemsSouce
是一个ObservableCollection<Column>
。我有一个按钮,可以向集合中添加新的Column
。但我的问题是,我希望通过该按钮将IsInEditMode
设置为true,以便于新添加的EditableTextBlock
。但我只能在ViewModel中访问Column
。如何访问ItemsSource
集合中指定Column
的EditableTextBlock
?
Column
派生一个类,并添加一个属性(例如:名称:IsInEditMode
)(或者使用包装器类。这里有一个类似的答案,建议使用包装器类),然后在DataTemplate中绑定该属性,如下所示:<DataTemplate DataType="local:DerivedColumn">
<utils:EditableTextBlock x:Name="editableTextBlock" Text="{Binding Name, Mode=TwoWay}"
IsInEditMode="{Binding IsInEditMode}"/>
</DataTemplate>
但我不想这样做。我希望有一种在XAML中完成此操作的方法,而无需派生类并添加不必要的代码。(同时遵守MVVM规则)