【发布时间】:2015-02-05 16:53:15
【问题描述】:
我正在使用以下内容处理 WPF 页面:
<ItemsControl ItemsSource="{Binding Peopl.PhoneNums}" x:Name="PhoneList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel Orientation="Horizontal" Margin="0,0,0,0" x:Name="PhoneEntry">
<TextBlock Text="123-456-78901"/>
<ComboBox ...>
</StackPanel>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
可以有多个堆栈面板,每个堆栈面板都有一个唯一的电话号码;在后面的代码中,每个电话号码都有一个标志,指示是否应该启用它;我希望能够根据该标志启用堆栈面板中的每个条目,但我无法访问它......
我有:
foreach (Phone phone in PhoneList.ItemsSource)
{
if (phone.ShouldBeDisabled)
{
int index = PhoneList.Items.IndexOf(phone);
PhoneList.IsEnabled = false;
//this disables the entire control;
// I can't access "PhoneEntry" here... hmm
}
}
有没有办法一次只禁用一个条目?如何访问PhoneEntry?我应该尝试根据绑定值禁用每个堆栈面板条目吗?
【问题讨论】:
-
不要在代码中这样做。每个 PhoneEntry StackPanel 的 DataContext 都应该是您的 Phone 项。将您的禁用属性绑定到 ShouldBeDisabled 应该是答案。视图关注视图模型,视图模型不操作视图。
标签: c# wpf itemscontrol stackpanel