gpt4 book ai didi

wpf - 在手动检查视觉元素(MVVM)之前,绑定(bind)到 ItemsSource 不起作用

转载 作者:行者123 更新时间:2023-12-03 10:30:43 27 4
gpt4 key购买 nike

我有 Xaml,它基本上应该将一组 ContextualButtons 用于选定选项卡的 View 模型绑定(bind)到 ToolBar 的 ItemsSource 属性。出于某种原因,除非我使用 Snoop 手动检查元素,否则此绑定(bind)实际上不会发生......似乎窥探元素的行为是以某种方式重新查询绑定(bind)。

有谁知道我在这里可能做错了什么?如果我也使用列表框,这种行为也是一样的,所以我知道这是我做错了……但我不确定是什么。

SelectedView 是 Xam Tab 控件中选定 View 的绑定(bind)属性。

XAML

<ToolBar DataContext="{Binding SelectedView.ViewModel}"
ItemsSource="{Binding ContextualButtons}" >
<ToolBar.ItemTemplate>
<DataTemplate>
<!-- <Button ToolTip="{Binding Name}"-->
<!-- Command="{Binding Command}">-->
<!-- <Button.Content>-->
<!-- <Image Width="32" Height="32" Source="{Binding ImageSource}"/>-->
<!-- </Button.Content>-->
<!-- </Button>-->
<Button Content="{Binding Name}"/>
</DataTemplate>
</ToolBar.ItemTemplate>

</ToolBar>

代码
      public class TestViewModel : BaseViewModel, IBulkToolViewModel
{


public TestViewModel()
{
ContextualButtons = new ObservableCollection<IContextualButton>()
{
new ContextualButton("Test Button",
new DelegateCommand<object>(
o_ => Trace.WriteLine("Called Test Button")), String.Empty)
};
}

public string Key { get; set; }
private ObservableCollection<IContextualButton> _contextualButtons;
public ObservableCollection<IContextualButton> ContextualButtons
{
get { return _contextualButtons; }
set
{
if (_contextualButtons == value) return;
_contextualButtons = value;
//OnPropertyChanged("ContextualButtons");
}
}

}

public partial class TestView : UserControl, IBulkToolView
{
public TestView()
{
InitializeComponent();

}


public IBulkToolViewModel ViewModel { get; set; }

}
public class ContextualButton : IContextualButton
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}

public ICommand Command { get; set; }
public string ImageSource { get; set; }

public ContextualButton(string name_, ICommand command_, string imageSource_)
{
Name = name_;
Command = command_;
ImageSource = imageSource_;
}
}

public class BulkToolShellViewModel : BaseViewModel, IBaseToolShellViewModel, IViewModel
{

private IBulkToolView _selectedView;
public IBulkToolView SelectedView
{
get
{
return _selectedView;
}
set
{
if (_selectedView == value) return;
_selectedView = value;
OnPropertyChanged("SelectedView");

}
}
public ObservableCollection<IBulkToolView> Views { get; set; }

public DelegateCommand<object> AddViewCommand { get; private set; }
public DelegateCommand<object> OpenPortfolioCommand { get; private set; }
public DelegateCommand<object> SavePortfolioCommand { get; private set; }
public DelegateCommand<object> GetHelpCommand { get; private set; }


public BulkToolShellViewModel(ObservableCollection<IBulkToolView> views_)
: this()
{
Views = views_;
}

public BulkToolShellViewModel()
{
Views = new ObservableCollection<IBulkToolView>();
AddViewCommand = new DelegateCommand<object>(o_ => Views.Add(new TestView
{
ViewModel = new TestViewModel()
}));
OpenPortfolioCommand = new DelegateCommand<object>(OpenPortfolio);
SavePortfolioCommand = new DelegateCommand<object>(SavePortfolio);
GetHelpCommand = new DelegateCommand<object>(GetHelp);
}

private void GetHelp(object obj_)
{

}

private void SavePortfolio(object obj_)
{

}

private void OpenPortfolio(object obj_)
{

}

public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged()
{
throw new NotImplementedException();
}

public void RaisePropertyChanged(string propertyName)
{
throw new NotImplementedException();
}

public string this[string columnName]
{
get { throw new NotImplementedException(); }
}

public string Error { get; private set; }
public AsyncContext Async { get; private set; }
public XmlLanguage Language { get; private set; }
public string Key { get; set; }


}

谢谢!

最佳答案

为什么BulkToolShellViewModel有自己的PropertyChanged事件以及 RaisePropertyChanged什么都不做的方法?它不应该从 BaseViewModel 继承此功能吗? ?也许 UI 正在附加到 BulkToolShellViewModel.PropertyChanged而不是 BaseViewModel.PropertyChanged并且永远不会收到更改通知。

关于wpf - 在手动检查视觉元素(MVVM)之前,绑定(bind)到 ItemsSource 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com