我的应用程序中有一个类.它必将赢得文本框控件.但是绑定到BookingNo属性的文本框始终显示为零(0).但我希望文本框保持空白.有什么办法吗?这是我的代码片段.
public class Booking
{
private int pBookingNo;
private string pCustomerName;
private string pAddress;
public int BookingNo
{
get { return pBookingNo; }
set
{
if (!value.Equals(pBookingNo))
{
pBookingNo = value;
}
}
}
public string CustomerName
{
get { return pCustomerName; }
set
{
if (!value.Equals(pCustomerName))
{
pCustomerName = value;
}
}
}
public Booking() { }
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
AddDataBindings();
} …Run Code Online (Sandbox Code Playgroud) 我有两个组合框,其中Parent必须显示国家/地区列表,子组合必须显示所选国家/地区的城市列表.数据存储在Dictionary<Int32, List<String>>具有名称的数据中CountriesCitiesList.我有以下代码
<ComboBox x:Name="cbCountriesList"
DataContext="{Binding CountriesCitiesList}"
IsSynchronizedWithCurrentItem="true">
</ComboBox>
<ComboBox x:Name="cbCitiesList" VirtualizingStackPanel.IsVirtualizing="True"
ItemsSource="{Binding CountriesCitiesList}"
IsSynchronizedWithCurrentItem="true">
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
问题是在城市组合中我无法显示所选国家的城市列表.我觉得它错过了最后一步.
假设我们有一个简单的模型和视图模型:
// Model
function Model(prop) {
this.Prop = ko.observable(prop);
}
// View Model
function ViewModel(){
var self = this;
this.CurrentItem = ko.observable(new Model("abc"));
this.Edit = function(){
$(#"EditDiv").dialog("show");
}
}
Run Code Online (Sandbox Code Playgroud)
然后是html:
<body>
<input type="button" data-bind="click: Edit"/>
<div id="EditDiv" data-bind="with: CurrentItem">
<input type="text" data-bind="value: Property" />
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
然后是页面底部的脚本:
$(document).ready(function(){
$("#EditDiv").dialog({ /* settings to hide it first. */ });
ko.applyBindings(new ViewModel());
});
Run Code Online (Sandbox Code Playgroud)
上面的代码工作,并将弹出一个带有文本框"abc"的jQuery窗口.
但是,如果我在div中划分页面并为每个div分配不同的模型视图,则绑定会中断:
<body>
<div id="ForAnotherBindingContextDiv">
</div>
<div id="TargetContextDiv">
<input type="button" data-bind="click: Edit"/>
<div id="EditDiv" data-bind="with: CurrentItem">
<input type="text" data-bind="value: Property" …Run Code Online (Sandbox Code Playgroud) 我花了几天时间没有自己解决这个问题,这使我相信我不理解xaml和代码隐藏的基本内容.我试图使用WPF和c#在ListView中显示来自ObservableCollection的数据.
当我开始调试时,窗口显示listview,包含网格和标题.可点击的行等于应该存在的项目数,但这些项目显示为空白或空白.我正在研究一个不完整的教程,试着通过这个来学习我的方法,代码如下:
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
NameList.cs:
class NameList : ObservableCollection<PersonName>
{
public NameList()
: base()
{
Add(new PersonName("Willa", "Cather")); //enumerated? (firstName, lastName)
Add(new PersonName("Isak", "Dinesen"));
Add(new PersonName("Victor", "Hugo"));
Add(new PersonName("Jules", "Verne"));
}
}
Run Code Online (Sandbox Code Playgroud)
PersonName.cs:
class PersonName
{
private string firstname;
private string lastname;
public PersonName(string first, string last)
{
this.firstname = first;
this.lastname = last;
}
public string FirstName { get; set; }
public string LastName { get; set; …Run Code Online (Sandbox Code Playgroud) 我在WPF窗口中有一个TextBox,我从后面的代码中填充(在用户从OpenFileDialog中选择一个后,使用文件名).
虽然我的TextBox.Text绑定到我的ViewModel类中的String属性,但是当文本设置为TextBox.Text时,不会填充该属性.
如果我输入TextBox,则会填充属性,因此必须有一些事件触发或在用户输入期间发生的事情,而不是我通过代码设置值时.
我错过了正确绑定的步骤是什么?
另外,属性上的set方法是在属性更改时调用还是UI?或两者?如果更改UI调用set方法,该方法触发PropertyChanged事件以更新UI,那么什么会永久停止此循环?
(我知道我可以直接设置属性,但我觉得我对绑定缺乏了解,我希望这有助于填补一些空白.)
我的示例代码:
<Window x:Class="ConfigurationViewer.ViewerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ConfigurationViewer"
Title="Configuration Viewer" Height="512" Width="714" >
<Window.DataContext>
<local:TaskViewModel x:Name="_model"/>
</Window.DataContext>
<DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<TextBlock Text="Configuration file" Margin="2" VerticalAlignment="Center" />
<TextBox Height="29" Margin="2" Name="textFilePath" Width="277" Text="{Binding Path=ConfigurationPath}" />
<Button Content="Browse ..." Margin="2" Name="buttonBrowseFile" Width="98" Click="buttonBrowseFile_Click" />
<Button Content="Open" Margin="2" Name="buttonOpenFile" Width="98" Click="buttonOpenFile_Click" />
</StackPanel>
</DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
public partial class ViewerWindow : Window
{
public ViewerWindow()
{
InitializeComponent();
}
private void buttonBrowseFile_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openDialog = new …Run Code Online (Sandbox Code Playgroud) 我已经声明了一个类但是当我尝试访问它的成员时,我收到以下错误:
DataBinding:'reapTest.Toop'不包含名为'Rang'的属性.
WebForm1.aspx.cs:
namespace reapTest {
public class Toop {
public string Rang;
public int Gheymat;
}
public static class MyData {
public static Toop[] TP = new Toop[] { new Toop() { Rang = "Ghermez", Gheymat = 100 }, new Toop() { Rang = "Yellow", Gheymat = 44 } };
public static Toop[] RT() {
return TP;
}
}
public partial class WebForm1 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
WebForm1.aspx:
<%@ Page …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用knockout.js data-bind属性应用border-radius css属性:
data-bind="style: { width: totalLength() < workDay ? totalLength() + 'px' : workDay + 'px', border-radius: '10px', background: '#a9fd76' }"
Run Code Online (Sandbox Code Playgroud)
但浏览器似乎根本不喜欢它.我从knockout.js文件中得到一个错误说:
"错误:无法解析绑定.消息:SyntaxError:missing:属性id之后;绑定值:style:{width:totalLength()<workDay?totalLength()+'px':workDay +'px',border-radius: '10px',背景:'#a9fd76'}"
这是否意味着knockout.js绑定不支持CSS3属性?
只是提到我将border-radius属性输出时一切正常.
假设我有以下Javascript:
var Option = (function ()
{
function Option(value, text)
{
this.value = value;
this.text = text;
}
return Option;
})();
var QuestionTypes = (function ()
{
QuestionTypes.chooseOne = new Option("ChooseOne", "Choose One");
QuestionTypes.chooseMany = new Option("ChooseMany", "Choose Many");
QuestionTypes.text = new Option("Text", "Text");
QuestionTypes.all = function ()
{
return
[
QuestionTypes.chooseOne,
QuestionTypes.chooseMany,
QuestionTypes.text
];
};
return QuestionTypes;
})();
Run Code Online (Sandbox Code Playgroud)
这个HTML:
<select data-bind="value: type, options: QuestionTypes.all, optionsValue: value, optionsText: text" />
Run Code Online (Sandbox Code Playgroud)
所以它select被绑定到我的"静态"变量QuestionTypes.我希望结果select看起来像这样:
<select data-bind="value: type, …Run Code Online (Sandbox Code Playgroud) 要点:自定义适配器通过数据库中的文件路径间接获取文件资源.低效/记忆问题.您的意见要求.
对所有搜索,相关链接和有用主题的引用都在后面.
以下代码有效,但有几个因素值得关注.需要一些更有经验的眼睛,请建议改善或潜在的错误,以避免.应用不需要是内容提供商(仅限应用于本地的数据).有问题的ListView将非常轻量级,只有大约5到10个条目.(我遗漏了数据库的东西,因为它有效.)
概述:
文件不在数据库中使得它与普通的SimpleCursorAdapter不同 - 必须拉动图像文件.添加了在填充listview之前将其制作成缩略图的开销.
如上所述,它很轻,但即使只有一两个条目,虚拟机也会出现问题.我怀疑这是与Bitmaps相关的所有内存抖动:
08-27 19:53:14.273: I/dalvikvm-heap(11900): Grow heap (frag case) to 4.075MB for 1228816-byte allocation
08-27 19:53:14.393: D/dalvikvm(11900): GC_CONCURRENT freed <1K, 5% free 4032K/4244K, paused 13ms+3ms, total 116ms
Run Code Online (Sandbox Code Playgroud)
/* myTextAndImageCursorAdapter.java */
import android.widget.SimpleCursorAdapter;
//import android.support.v4.widget.SimpleCursorAdapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.database.Cursor;
import java.io.File;
import android.widget.ImageView;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import static android.media.ThumbnailUtils.extractThumbnail;
public class TextAndImageCursorAdapter extends SimpleCursorAdapter {
private Context context;
private int layout;
public TextAndImageCursorAdapter …Run Code Online (Sandbox Code Playgroud) 所以我想为模板绑定创建一个快捷方式,如下所示:
ko.bindingHandlers.shortcut = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var data = valueAccessor();
var nextValueAccessor = function () {
return { name: 'someTemplate', data: data };
};
ko.bindingHandlers.template.init.call(this, element, nextValueAccessor, allBindings, viewModel, bindingContext);
}
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div data-bind="shortcut: 'Hey!'"></div>
<script type="text/html" id="someTemplate">
<div data-bind="text: $data"></div>
</script>
Run Code Online (Sandbox Code Playgroud)
定义了"someTemplate"模板.只是没有说什么就行不通.我在这做错了什么?
data-binding ×10
c# ×4
knockout.js ×4
javascript ×3
wpf ×3
android ×1
asp.net ×1
css3 ×1
dialog ×1
image ×1
jquery ×1
listview ×1
modal-dialog ×1
typescript ×1
web ×1