我知道这个话题已经讨论过,但我还没有讨论过。正如我在其他关于此问题的示例中看到的那样,我正在尝试创建一些基本的自定义DataPager
UserControl
。所以我做了以下事情:
XAML:
<ComboBox Name="Size" ItemsSource="{Binding PageSourceSize}"
SelectedValue="{Binding PageSizePager}" />
使用以下C#:
ObservableCollection<int> _PageSourceSize;
public ObservableCollection<int> PageSourceSize
{
get { return _PageSourceSize; }
set
{
_PageSourceSize = value;
RaisePropertyChanged("PageSourceSize");
}
}
public MyDataPager()
{
DataContext = this;
PageSizePager = 10;
PageSourceSize = new ObservableCollection<int>() { 10, 20, 50,100 };
}
public int PageSizePager
{
get { return (int)GetValue(PageSizePagerProperty); }
set { SetValue(PageSizePagerProperty, value); }
}
public static readonly DependencyProperty PageSizePagerProperty =
DependencyProperty.Register("PageSizePager", typeof(int), typeof(MyDataPager), new PropertyMetadata(10));
从这里开始,我打算在主UserControl
中使用我的寻呼机:
<local:MyDataPager PageSizePager="20" x:Name="MyDataPager1" />
这样可以正常使用,但我希望使用以下内容从viewModel
获取值
<local:MyDataPager PageSizePager="{Binding Path=PageSize,Mode=TwoWay}" x:Name="MyDataPager1" />
视图模型:
public int PageSize
{
get { return (int)GetValue(PageSizeProperty); }
set { SetValue(PageSizeProperty, value); }
}
public static readonly DependencyProperty PageSizeProperty =
DependencyProperty.Register("PageSize", typeof(int), typeof(ViewSchedeConsuntiviViewModel), new PropertyMetadata(10));
public MyViewModel()
{
PageIndex = 1;
PageSize = 20;
}
有人可以解释为什么视图模型和用户控件之间的绑定不起作用吗?
答案 0 :(得分:1)
查看代码,您似乎在不同的类中定义了多个PageSize
属性。最可能的是,通过查看提供的代码很难理解,您在XAML
一个属性中绑定,而是更改另一个属性的值。改变其中一个PageSize
属性的名称,以确定完全数据绑定将在何处进行读/写。
我认为这应该有所帮助。
答案 1 :(得分:0)
与我的一位同事合作,我们找到了一个解决方案,我想做什么:
在MyDataPager usercontrol的Xaml中:
<Grid x:Name="LayoutRoot" Background="White" Loaded="MyDataPager_Loaded">
....
使用MyDataPager_Loaded的这个定义:
void MyDataPager_Loaded(object sender, RoutedEventArgs e)
{
((Grid)sender).DataContext = this;
}
从上面的代码中我们更改了MyDataPager usercontrol的ctor以删除datacontext绑定:
public MyDataPager()
{
//DataContext = this;
以这种方式工作,我能够在主用户控件中绑定值,如下所示:
<local:MyDataPager PageSizePager="{Binding Path=PageSize,Mode=TwoWay}" x:Name="MyDataPager1" />
因此,绑定是基于childusercontrol的属性,而不是它的控制(即:子控件的外观可能没有问题地改变),以便子用户控件不必使用来自的任何“已知”值主用户控件的datacontext。
感谢您的阅读和支持,我们非常欢迎。我希望这些专栏能够满足另一个需要的人。