C# 将控件值与具有值列表的属性绑定。有可能吗?
我有一些控件(时段选择器)的窗口: 更新 但对我来说,这不是一个很好的解决方案。 也许你知道更简单的方法吗?我删除了你的设计属性,使解决方案看起来更简洁 将C# 将控件值与具有值列表的属性绑定。有可能吗?,c#,.net,wpf,xaml,data-binding,C#,.net,Wpf,Xaml,Data Binding,我有一些控件(时段选择器)的窗口: 更新 但对我来说,这不是一个很好的解决方案。 也许你知道更简单的方法吗?我删除了你的设计属性,使解决方案看起来更简洁 将TimePeriodTypes列表暴露在代码中: public List<TimePeriodType> Periods = new List<TimePeriodType>() { new TimePeriodType() { Name="Hours", Max=6, Min=1 }, new
TimePeriodType
s列表暴露在代码中:
public List<TimePeriodType> Periods = new List<TimePeriodType>() {
new TimePeriodType() { Name="Hours", Max=6, Min=1 },
new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
现在,您可以直接将滑块的属性
绑定到列表框
的SelectedItem
的属性(这实际上是一个TimePeriodType
,因为之前绑定的原因):
我删除了您的设计属性以使解决方案看起来更干净
将TimePeriodType
s列表暴露在代码中:
public List<TimePeriodType> Periods = new List<TimePeriodType>() {
new TimePeriodType() { Name="Hours", Max=6, Min=1 },
new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
现在,您可以直接将滑块的属性
绑定到列表框
的SelectedItem
的属性(这实际上是一个TimePeriodType
,因为之前绑定的原因):
好的,我找到了解决办法。
get方法应具有以下属性:
public class TimePeriodType {
public string Name { set; get; }
public int Min { set; get; }
public int Max { set; get; }
}
List<TimePeriodType> _periods = new List<TimePeriodType>() {
new TimePeriodType() { Name="Hours", Max=6, Min=1 },
new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
public List<TimePeriodType> Periods {
get { return _periods; }
set { _periods = value; }
}
好的,我找到了解决办法。
get方法应具有以下属性:
public class TimePeriodType {
public string Name { set; get; }
public int Min { set; get; }
public int Max { set; get; }
}
List<TimePeriodType> _periods = new List<TimePeriodType>() {
new TimePeriodType() { Name="Hours", Max=6, Min=1 },
new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
public List<TimePeriodType> Periods {
get { return _periods; }
set { _periods = value; }
}
好啊但组合框中有6条空白记录,而不是2个名称。我应该怎么做才能只看到名称?在您的
组合框中,将显示成员路径设置为“名称”
;它指示控件使用每个项上的Name
属性作为显示值。另外,我不知道为什么列表中有6项,如果绑定到只有2个对象的列表。。。你必须进一步调试它。好的。我在帖子中更正了我的XAML代码。你可以看看。也许我做错了什么。除了事件选择的remove方法Changed外,我没有在c代码中更改任何内容。我尝试通过DataContext和ItemsSource进行绑定,但效果相同。真的,我不知道列表上是否有6个元素。我不能选择任何人。但列表看起来像6个空元素(我指的是列表的高度-空白的白色矩形)。我还试图设置DisplayMemberPath=“Name”,但效果相同。我唯一看到的错误是DisplayMemberPath=“{Binding Path=Name}”
应该是DisplayMemberPath=“Name”
(它只是一个文本字段,不需要绑定)因此,下一步是添加一个ItemsControl
,其ItemsSource
与您的组合框相同<代码>'这应该会准确地显示
组合框'绑定到的内容。好的,我只是重新阅读了您之前的评论;我认为问题在于,组合框
的初始绑定不正确,因为窗口(或其他根元素)的DataContext
不正确。在窗口(或UserControl
等)的开始标记中添加以下属性:DataContext=“{Binding RelativeSource={RelativeSource Self}}”
Ok。但组合框中有6条空白记录,而不是2个名称。我应该怎么做才能只看到名称?在您的组合框中,将显示成员路径设置为“名称”
;它指示控件使用每个项上的Name
属性作为显示值。另外,我不知道为什么列表中有6项,如果绑定到只有2个对象的列表。。。你必须进一步调试它。好的。我在帖子中更正了我的XAML代码。你可以看看。也许我做错了什么。除了事件选择的remove方法Changed外,我没有在c代码中更改任何内容。我尝试通过DataContext和ItemsSource进行绑定,但效果相同。真的,我不知道列表上是否有6个元素。我不能选择任何人。但列表看起来像6个空元素(我指的是列表的高度-空白的白色矩形)。我还试图设置DisplayMemberPath=“Name”,但效果相同。我唯一看到的错误是DisplayMemberPath=“{Binding Path=Name}”
应该是DisplayMemberPath=“Name”
(它只是一个文本字段,不需要绑定)因此,下一步是添加一个ItemsControl
,其ItemsSource
与您的组合框相同<代码>'这应该会准确地显示
组合框'绑定到的内容。好的,我只是重新阅读了您之前的评论;我认为问题在于,组合框
的初始绑定不正确,因为窗口(或其他根元素)的DataContext
不正确。在窗口(或UserControl
等)的开始标记中添加以下属性:DataContext=“{Binding RelativeSource={RelativeSource Self}}”
<ListBox ItemsSource="{Binding Periods}"
Name="timeType" />
<Slider Maximum="{Binding SelectedItem.Max, ElementName=timeType}"
Minimum="{Binding SelectedItem.Min, ElementName=timeType}"
Name="timeSlider" />
<Label Content="{Binding Value, ElementName=timeSlider}"
Name="timeValue" />
<Label Content="{Binding Minimum, ElementName=timeSlider}"
Name="timeValueMin" />
<Label Content="{Binding Maximum, ElementName=timeSlider}"
Name="timeValueMax" />
public class TimePeriodType {
public string Name { set; get; }
public int Min { set; get; }
public int Max { set; get; }
}
List<TimePeriodType> _periods = new List<TimePeriodType>() {
new TimePeriodType() { Name="Hours", Max=6, Min=1 },
new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
public List<TimePeriodType> Periods {
get { return _periods; }
set { _periods = value; }
}
ItemsSource="{Binding Periods, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"