我注意到有很多依赖属性问题。我希望这有点不同,值得一提。我也愿意承认我可能采取了错误的做法。
我目前的任务是创建一个带有自定义搜索参数用户控件的搜索窗口。您拥有用户控件的想法是进行搜索并确定搜索参数,搜索结果显示在主窗口的GridView上。所以基本的问题是我在用户控件的视图模型中有一个ObservableCollection,它定义为依赖属性,我需要将主窗口的DataGrid绑定到该ObservableCollection。要添加最后一层复杂性,窗口的用户控件在运行时通过将其传递到窗口的构造函数来确定。
DataSearchBase.xaml.cs
public DataSearchBase(BaseUserSearch us)
{
InitializeComponent();
userSearchControl = us;
SetSearchUserControl();
ResetTitle();
SetupGridColumns();
}
private void SetSearchUserControl()
{
Grid.SetRow(userSearchControl, 0);
Grid.SetColumn(userSearchControl, 0);
SearchGrid.Children.Add(userSearchControl);
DataContext = userSearchControl;
}
请注意,我将基本窗口的数据上下文设置为userSearchControl
DataSearchBase.xaml
<DVD:SimpleEditWindowBase
x:Class="DVDLibrary.View.DataSearchBase"
xmlns:DVD="clr-namespace:DVDLibrary.View"
x:Name="DataSearch_frm">
...
<DataGrid AutoGenerateColumns="False"
Name="searchResultsGrid"
ItemsSource="{Binding ElementName=UserSearch,Path=DataContext.SearchResults,
UpdateSourceTrigger=PropertyChanged}"/>
请注意,我尝试将ItemsSource绑定设置为UserControl视图模型的SearchResults依赖项属性。
DVDSearch.xaml
<UserControl
x:Class="DVDLibrary.View.DVDSearch"
xmlns:local="clr-namespace:DVDLibrary.View"
xmlns:vm="clr-namespace:DVDLibrary.ViewModel"
mc:Ignorable="d"
x:Name="UserSearch"
>
<UserControl.DataContext>
<vm:DVDSearchControlViewModel />
</UserControl.DataContext>
</local:BaseUserSearch>
请注意,我已将用户控件的名称及其数据上下文设置为我的视图模型。
除了InitializeComponent()之外,我的DVDSearch.xaml.cs是空的。
DVDSearchControlViewModel.cs
class DVDSearchControlViewModel : DependencyObject, INotifyPropertyChanged
{
public DVDSearchControlViewModel()
{
//base
SearchCommand = new DelegateCommand<object>(OnSearch, CanSearch);
SearchResults = dvdList.DVDs; //a populated list of my DVDModel class.
}
public static readonly DependencyProperty SearchResultsProperty =
DependencyProperty.Register("SearchResults",
typeof(ObservableCollection<DVDModel>), typeof(DVDSearchControlViewModel),
new PropertyMetadata(new ObservableCollection<DVDModel>()));
public ObservableCollection<DVDModel> SearchResults
{
get { return (ObservableCollection<DVDModel>)this.GetValue(SearchResultsProperty); }
set { this.SetValue(SearchResultsProperty, value); }
}
public DelegateCommand<object> SearchCommand { get; private set; }
private void OnSearch(object arg)
{
var results = (from DVD in DVDs
where DVD.TypeOfDisk == DiskType.DiskTypeID
select DVD).ToList();
foreach (DVDModel model in results)
{
SearchResults.Add(model);
}
}
private bool CanSearch(object arg)
{
if (DiskType == null && Director == null)
{
return false;
}
return true;
}
}
我遇到的问题是DataSearchBase窗口上的searchResultsGrid没有绑定到DVDSearchControlViewModel的SearchResults。所有其他绑定都正常工作,SearchResults在构造函数期间和OnSearch方法期间都被填充(就像在更新中一样)。
感谢您阅读我的问题。我知道它有点啰嗦,并且毫不犹豫地告诉我,我是否真的有一个非常基本的概念。我只需要弄清问题是什么。