C# 绑定菜单项';s被选中为选项卡项';她当选了
基本上,我面临的问题与在 我定制了TabControl,使其具有自己的viewModel,并且我有一个绑定到同一源的菜单。 所发生的情况是将C# 绑定菜单项';s被选中为选项卡项';她当选了,c#,wpf,xaml,menuitem,tabitem,C#,Wpf,Xaml,Menuitem,Tabitem,基本上,我面临的问题与在 我定制了TabControl,使其具有自己的viewModel,并且我有一个绑定到同一源的菜单。 所发生的情况是将menuItem的isChecked绑定到isSelected不再起作用我以为找不到IsSelected,因为viewModel中没有此类属性 <Setter Property="IsChecked" Value="{Binding IsSelected, Mode=TwoWay}" /> C# 公共对象转换(对象值、类型targetType、
menuItem
的isChecked
绑定到isSelected
不再起作用我以为找不到IsSelected,因为viewModel中没有此类属性
<Setter Property="IsChecked" Value="{Binding IsSelected, Mode=TwoWay}" />
C#
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
ItemCollection ic=(ItemCollection)值;
列表选项卡项=新列表();
foreach(ic中的var obj)
{
tabItems.Add((TabItem)obj);
}
退货项目;
}
以下是基于所提供项目的变更 从绑定中删除以下内容,这不是必需的
,Mode=OneWay,NotifyOnSourceUpdated=True,Converter={StaticResource TabControlItemConverter}
在样式中修改setterTabMenuItemxxx
从
修改TabData
类,如下所示
public class TabData : INotifyPropertyChanged
{
private bool isselected;
public string Header { get; set; }
public object Content { get; set; }
public bool IsEnabled { get; set; }
public bool IsSelected
{
get { return isselected; }
set
{
if (ViewModel.CurrentItem.IsSelected && ViewModel.CurrentItem != this)
{
ViewModel.CurrentItem.IsSelected = false;
}
isselected = value;
RaisePropertyChanged("IsSelected");
if (ViewModel.CurrentItem != this)
ViewModel.CurrentItem = this;
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
这是您需要在项目中更改的全部内容,以便将菜单项的选中与选项卡项的选中同步
关于关闭选项卡项的第二个问题,可以通过更改关闭按钮的
CommandParameter="{Binding SelectedItem,ElementName=tabControl}"
到
样本项目
让我知道结果。Ty,非常漂亮的答案!
CommandParameter=“{Binding}”
如何推断TabItem
属于它自己?@baozi,{Binding}
指绑定到元素的对象,在本例中是TabData类的实例。有关非限定{Binding}语法的详细信息,请参阅。我很高兴,这个解决方案帮助你解决了一些问题。最后但并非最不重要的是,快乐编码:)
<Setter Property="IsChecked" Value="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=TabItem}}" />
<Setter Property="IsChecked" Value="{Binding Path=IsSelected, Mode=TwoWay/>
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
public class TabData : INotifyPropertyChanged
{
private bool isselected;
public string Header { get; set; }
public object Content { get; set; }
public bool IsEnabled { get; set; }
public bool IsSelected
{
get { return isselected; }
set
{
if (ViewModel.CurrentItem.IsSelected && ViewModel.CurrentItem != this)
{
ViewModel.CurrentItem.IsSelected = false;
}
isselected = value;
RaisePropertyChanged("IsSelected");
if (ViewModel.CurrentItem != this)
ViewModel.CurrentItem = this;
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
CommandParameter="{Binding SelectedItem,ElementName=tabControl}"
CommandParameter="{Binding}"